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
en las estadísticas Cuando la tabla registra un número, simplemente use count(*) o count(1).