Cuando COUNT(*)
tenga en cuenta los índices de columna, será el mejor resultado. Mysql con el motor MyISAM 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 tienes 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
la consulta y verificar si los índices se usan realmente y dónde deben agregarse.
La siguiente no es la forma más rápida, pero hay un caso en el COUNT(*)
que realmente no encaja: cuando comienza a agrupar los resultados, puede tener 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 seleccione filas de datos, simplemente agregue la SQL_CALC_FOUND_ROWS
palabra clave después de SELECT:
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 declaración WHERE. Realmente debería prestar atención a cómo se utilizan los índices, cuando hay muchas filas (decenas de miles, millones y más).
SELECT 1
y noSELECT *
. ¿Hay una diferencia?