sql >> Base de Datos >  >> RDS >> Mysql

MySQL:la forma más rápida de contar el número de filas

Cuando COUNT(*) toma en cuenta los índices de las columnas, por lo que será el mejor resultado. Mysql con MyISAM el motor en realidad almacena el recuento de filas, no cuenta todas las filas cada vez que intenta contar todas las filas. (basado en la columna de la clave principal)

Usar PHP para contar filas no es muy inteligente, porque tiene que enviar datos de mysql a php. ¿Por qué hacerlo cuando puedes lograr lo mismo en el lado de mysql?

Si COUNT(*) es lento, debe ejecutar EXPLAIN en la consulta y verifique si los índices se usan realmente y dónde deben agregarse.

El siguiente no es el más rápido manera, pero hay un caso, donde COUNT(*) realmente no encaja:cuando comienza a agrupar los resultados, puede encontrarse con un problema, donde COUNT realmente no cuenta todas las filas.

La solución es SQL_CALC_FOUND_ROWS . Esto generalmente se usa cuando está seleccionando filas pero aún necesita saber el recuento total de filas (por ejemplo, para la paginación). Cuando selecciona filas de datos, simplemente agregue el SQL_CALC_FOUND_ROWS palabra clave después de SELECCIONAR:

SELECT SQL_CALC_FOUND_ROWS [needed fields or *] FROM table LIMIT 20 OFFSET 0;

Una vez que haya seleccionado las filas necesarias, puede obtener el recuento con esta única consulta:

SELECT FOUND_ROWS();

FOUND_ROWS() debe llamarse inmediatamente después de la consulta de selección de datos.

En conclusión, todo se reduce a cuántas entradas tiene y qué hay en la instrucción WHERE. Realmente debe prestar atención a cómo se usan los índices, cuando hay muchas filas (decenas de miles, millones y más).