2012-10-11 24 views
5

Para obtener el número total de registros, que suelen utilizar esta consulta:Qué MySQL consulta es efectiva para obtener el número total de registros

$total= mysql_num_rows(mysql_query("SELECT id FROM t_statistic WHERE pageid = $pid")); 

pero tiene uno la otra consulta, como a continuación:

$data = mysql_fetch_object(mysql_query("SELECT COUNT(id) AS num_rows FROM t_statistic WHERE pageid = $pid")); 
$total = $data->num_rows; 

Entre las dos consultas anteriores. ¿Cuál es más rápido y eficaz (cuando el número total de registros en millones)?

+0

ambos asumen que la consulta de selección ha sido exitosa, y explotará si algo falla. asumiendo que las consultas funcionan es un mal camino a seguir. –

+0

Un posible duplicado de http://stackoverflow.com/questions/2485224/sql-php-which-is-faster-mysql-num-rows-or-select-count – janenz00

Respuesta

5

Prefiero la segunda consulta. Ya le da el recuento de registros, mientras que la primera consulta le da la lista de ID (no el recuento), aunque se ha filtrado, pero hay algunos casos en que la ID existe más de una vez en la tabla.

0

Definitivamente el segundo.

Algunos motores, como MySQL pueden hacer un recuento simplemente mirando un índice en lugar de los datos de la tabla.

He utilizado algo como lo siguiente en bases de datos con millones de registros.

SELECT count(*) as `number` FROM `table1`; 

Mucho más rápido que: mysql_num_rows ($ res);

BTW: El * en Count (*) básicamente significa que no verá los datos, solo contará los registros, en contraposición a Count (colname).

1

la segunda consulta es rápida y eficiente:

SELECT COUNT (id) AS num_rows DE DONDE t_statistic PageID = $ pid

Si usted sabe sobre la optimización de consultas. La consulta solo contará solo en la memoria mientras se calcula la respuesta. Y da directamente el número de filas.

Donde como primera consulta:

SELECT id DE DONDE t_statistic PageID = $ pid

mantiene todas las filas seleccionadas en la memoria. luego se calcula el número de filas en operación adicional.

Así que second consulta es mejor en ambos sentidos.

0
1) SELECT COUNT(*) FROM t_statistic WHERE pageid = $pid" --> count(*) counts all rows 

2)SELECT COUNT(id) FROM t_statistic WHERE pageid = $pid" --> COUNT(column) counts non-NULLs only 

3) SELECT COUNT(1) FROM t_statistic WHERE pageid = $pid" -->COUNT(1) is the same as COUNT(*) because 1 is a non-null expressions 

Your use of COUNT(*) or COUNT(column) should be based on the desired output only. 

So. Finalmente tenemos el resultado es recuento (columna) es más rápido en comparación con el recuento (*).

Cuestiones relacionadas