Análisis de rendimiento MySQL COUNT
¿Cómo implementar el recuento (*)?
El recuento (*) anterior se refiere a la consulta sin la condición Where. Count (*) sin una condición donde se implementa de manera diferente en diferentes motores de bases de datos:
¿Por qué InnoDB no almacena el número total de filas?
Debido al soporte de transacciones de InnoDB, las consultas que realizan múltiples transacciones al mismo tiempo devolverán un número indeterminado de filas de la tabla InnoDB debido al control de concurrencia de múltiples versiones (MVCC).
¿Cómo optimiza InnoDB COUNT(*)?
InnoDB es una tabla organizada por índice. Todos los datos están organizados por recuento B. Los nodos hoja del índice de clave principal son la fila completa de datos, mientras que los nodos hoja del índice ordinario son la clave principal. valores Por lo tanto, el árbol de índice ordinario El tamaño es mucho más pequeño que el árbol de índice de clave principal. Para count (*), el optimizador de MySQL encuentra el árbol de índice más pequeño y lo atraviesa.
Si una tabla grande requiere operaciones de recuento (*) frecuentes, considere crear una tabla separada para contener el recuento de filas de la tabla grande.
¿Qué significa CONTAR?
COUNT () es una función agregada. El conjunto de resultados devuelto debe juzgarse fila por fila. Si no hay NULL en los parámetros de la función COUNT, se agregarán los valores acumulativos. no se agregarán.
¿Cuántos usos tiene COUNT?
Además de no tomar ningún valor durante la ejecución, COUNT(*) está optimizado para el recorrido selectivo del árbol de índice y la capa del servidor acumula fila por fila.
COUNT (ID de clave principal), InnoDB recorrerá toda la tabla, extraerá el valor de ID de cada fila y lo devolverá a la capa del servidor. Una vez que la capa del servidor obtiene el valor de ID, determina que no puede estar vacío y lo acumula fila por fila.
COUNT(1), el motor InnoDB recorre toda la tabla sin tomar ningún valor. La capa del servidor coloca un número "1" en cada fila devuelta. Si se considera que no puede estar vacío, se acumula por fila.
Cuando COUNT (campo), si el campo se define como NOT NULL, la capa del servidor juzgará a partir del registro que el campo no puede ser NULL y luego lo acumulará fila por fila, pero si el campo lo es; Si se permite que sea NULL, la capa del servidor puede obtener Para registros NULL, debe determinar si el valor del registro es NULL.
COUNT eficiencia
COUNT(campo) lt; COUNT(ID de clave principal) lt; COUNT(1) COUNT(*)