2008-09-22 16 views

Respuesta

27

le han dicho correctamente. mysql puede hacer esto por ti, que es mucho más eficiente.

$result = mysql_query("select count(id) as num_rows from table"); 
$row = mysql_fetch_object($result); 
$total = $row->num_rows; 
0

¿Qué pasa algo como esto:

$result = mysql_query("SELECT COUNT(id) AS total_things from table"); 
$row = mysql_fetch_array($result,MYSQL_ASSOC); 
$num_results = $row["total_things"]; 
+0

Sí, que funcionará también. – Wayne

2

De acuerdo con la MySQL documentation esto es más eficiente si está utilizando una tabla MyISAM (que es el tipo más habitual de tablas utilizado):

$result = mysql_query("SELECT COUNT(*) FROM table"); 

De lo contrario, debe hacer lo que declaró Wayne y asegurarse de que la columna contada esté indexada.

+0

Bueno - No sabía que optimizaban la cuenta (*) cuando no hay otras columnas seleccionadas. Aún así, me gusta tener el hábito si el rendimiento cuenta en las columnas relevantes, que generalmente es la clave principal. –

1

¿Puedo agregar que la forma más "eficiente" de obtener el número total de registros, particularmente en una tabla grande, es guardar el monto total como un número en otra tabla. De esta manera, no tiene que consultar toda la tabla cada vez que quiera obtener el total.

Sin embargo, tendrá que configurar algún código o Triggers en la base de datos para aumentar o disminuir ese número cuando se agrega/elimina una fila.

Así que no es la manera más fácil, pero si su sitio web crece, definitivamente debería considerar hacerlo.

3

tablas MyISAM ya almacenar el número de filas

SELECT COUNT(*) FROM table 

en una tabla MyISAM simplemente lee ese valor. No escanea la tabla o el índice (es). Por lo tanto, es tan rápido o más rápido que leer el valor de una tabla diferente.

0

Solo quería señalar que SHOW TABLE STATUS devuelve una columna Rows, aunque no puedo hablar de su eficacia. Algunos Google ligeros dan vuelta informes de la lentitud en MySQL 4 hace más de dos años. Podría hacer pruebas contrarreloj interesantes.

También tenga en cuenta InnoDB caveat con respecto a recuentos inexactos.

1

Aunque acepto utilizar las funciones incorporadas, realmente no veo ninguna diferencia de rendimiento entre mysql_num_rows y count (id). Para 25000 resultados, el mismo rendimiento (puede decir exacto.) Solo para el registro.

0

Usar la función de agregado. Pruebe el siguiente comando SQL

$num= mysql_query("SELECT COUNT(id) FROM $table"); 
0

mysqli_query() está en desuso.Mejor usar esto:

$result = $dbh->query("SELECT id FROM {table_name}"); 
$total = $result->num_rows; 

Usando DOP:

$result = $dbh->query("SELECT id FROM {table_name}"); 
$total = $result->rowCount(); 

(donde '$ dap' = mango de la db conectado a)

Cuestiones relacionadas