2011-09-15 15 views
6

Tengo varios SELECT declaraciones en una página PHP, y utiliza Dreamweaver para generar esos.mysql_num_rows() php - ¿es eficiente?

Después de pasar por el código que generó, parecía haber una gran cantidad de pelusas que podía cortar en la mayoría de los casos, una línea mysql_num_rows() para cada declaración es un ejemplo.

Así que me pregunto si alguien me puede decir si es o no realmente ahorra recursos - teniendo en cuenta la consulta se ejecuta sin tener en cuenta, ¿hay alguna gastos generales reales para esto?


ACTUALIZACIÓN: Después de seguir la sugerencia de Chriszuma sobre microtime, aquí están mis resultados:

//time before running the query 
1: 0.46837500 1316102620 

//time after the query ran 
2: 0.53913800 1316102620 

//time before calling mysql_num_rows() 
3: 0.53914200 1316102620 

//time after mysql_num_rows() 
4: 0.53914500 1316102620 

Así que no hay mucho por encima en todo, parece

+0

Siempre hay una sobrecarga en una llamada de función en PHP, pero generalmente es mínima, a menos que la llame cientos de miles de veces ... – DaveRandom

Respuesta

3

yo esperaría que una llamada de este tipo haría tener un impacto extremadamente mínimo en el rendimiento. Solo cuenta las filas de su resultado de consulta almacenado internamente. La consulta SQL en sí va a tomar la gran mayoría del tiempo de procesamiento.

Si desea estar seguro, puede ejecutar microtime() antes y después de la llamada para ver exactamente cuánto tiempo está tomando.

$startTime = microtime(true); 
mysql_num_rows(); 
$time = microtime(true) - $startTime; 
echo("mysql_num_rows() execution: $time seconds\n"); 

Mi sospecha es que verá algo en el rango de microsegundos.

+1

esto funcionó aunque hice una prueba rápida y sucia mientras escribía el código acaba de llamar microtime() por sí mismo cada vez :) – jammypeach

4

mysql_num_rows() cuenta las filas después de que hayan sido recuperadas. Es como el que obtuvo todas las filas y los almacena en una matriz PHP, y luego ejecutó count($array). Pero mysql_num_rows() se implementa en C dentro de la biblioteca cliente de MySQL, por lo que debe ser un poco más eficiente que el código PHP equivalente.

Tenga en cuenta que con el fin de mysql_num_rows() para trabajar, usted tiene que tener el resultado completo de la consulta en el espacio de memoria de PHP. Por lo tanto, hay una sobrecarga en el sentido de que un conjunto de resultados de consulta puede ser grande y ocupar mucha memoria.

+1

1 es por eso 'mysql_num_rows' no funcionará cuando se utiliza [mysql_unbuffered_query] (http://php.net/manual/en/function.mysql-unbuffered-query. php) – webbiedave

Cuestiones relacionadas