Red de conocimiento informático - Aprendizaje de programación - Habilidades de análisis de diferencias de recuento de selección de MySQL

Habilidades de análisis de diferencias de recuento de selección de MySQL

1. Entorno de prueba

Sistema operativo: Linux:

Base de datos: mysql-5.5.18

Tabla: motor de almacenamiento innodb

La tabla se define de la siguiente manera:

2. Escenario de prueba y tabla de cálculo de análisis group_message número de registros

(1)select

contar( *) forma

(2)seleccionar

contar(1) forma

(3)seleccionar

contar(col_ nombre ) forma

Usar respectivamente

select

count(group_id)

select

count(user_id)

select

count(col_null) Como se puede ver en los resultados de la prueba anterior, tanto select

count(*) como select

count(1) Se utiliza el índice secundario group_id más corto. Algunas personas pueden preguntar por qué no se utiliza el tipo int de índice de clave primaria más corto. Esto se debe principalmente a que en el motor de almacenamiento innodb, el índice de clave primaria contiene esencialmente el índice y los datos. es inherentemente costoso. Mire algunas selecciones más

count(col_name),

count(group_id) usa el índice secundario más corto, porque esta columna es una columna de índice y count(user_id) usa Combined; índice, porque el contenido real de user_id no se puede usar en el índice, pero escanear el índice también puede obtener la cantidad de registros, y el costo es menor que escanear registros físicos. Esto debería ser una optimización de mysql count(col_null) no puede. use el índice porque esta columna contiene valores nulos, por lo que es la menos eficiente. Además, count(col_null) en realidad no contará los registros que contengan valores nulos, lo que sería inconsistente con su intención original de querer contar el número de registros en la tabla. Por ejemplo, hay 852226 registros en la tabla de prueba, pero existen. hay solo 1 columna col_null que no está en blanco, entonces los resultados estadísticos son los siguientes:

3. Conclusión de la prueba

Mysql, debes pasar select

count

en las estadísticas Cuando la tabla registra un número, simplemente use count(*) o count(1).