2009-05-06 27 views
7

¿Hay una función incorporada en PHP o MySQL que proporcione la cantidad total de consultas MySQL utilizadas en una página? He visto en muchos sitios (principalmente foros) que tienen un mensaje en la parte inferior que dice algo así como "Página generada en 0,6 segundos con 20 consultas".¿Cómo puedo contar el número total de consultas MySQL utilizadas por página?

Si no hay nada incorporado, agregaré algo a mi clase de base de datos para contarlos, pero parece que es el tipo de funcionalidad que ya estaría disponible.

Respuesta

6

La primera opción sería la de pasar todas sus consultas a través de un envoltorio:

function custom_mysql_query($sql) 
{ 
    $GLOBAL['query_count'] ++; 
    return mysql_query($sql); 
} 

Tenga en cuenta que es sólo para ilustración y sin control de errores, etc.

Se puede consultar MySQL para el número de consultas se ejecuten:

mysql> SHOW STATUS LIKE 'Com_select'; 
+---------------+-------+ 
| Variable_name | Value | 
+---------------+-------+ 
| Com_select | 2  | 
+---------------+-------+ 
1 row in set (0.00 sec) 

Es posible que desee hacer algo como:

SHOW STATUS LIKE 'Com_%'; 

y luego sumar Com_select, Com_update, Com_insert y Com_delete

+1

Gracias, 'mostrar el estado' es exactamente lo que quería. Fui con: SHOW STATUS WHERE Variable_name IN ('Com_select', 'Com_update', 'Com_insert', 'Com_delete') – DisgruntledGoat

3

No hay nada integrado en las extensiones nativas de PHP mysql/mysqli. Si está utilizando una capa de abstracción de base de datos, puede haber algún tipo de análisis/evaluación comparativa integrada que le proporcione esa información.

Off-hand, sé Kohana hace esto con la biblioteca Profiler. Supongo que la mayoría de las bibliotecas de bases de datos hacen algo similar.

Si no está seguro de utilizar un marco de terceros o una capa de abstracción de base de datos, he tenido éxito simplemente subclasificando la clase incorporada de PHP5 PDO. Puede agregar información de referencia básica y conteos de consultas, y pasar las llamadas query() o execute() a la clase principal.

4

Lo que hago es crear una clase de consulta sql que cuente, agrega 1 a una variable llamada querycount cada vez que se ejecutan los métodos de consulta en la clase, así tengo un total acumulado.

2

Con el fin de evitar globales, en su clase db:

class db { 
    public static $query_count = 0; 

    public static function query($str) { 
     self::$query_count++; 
     // your db query method here 
    } 
} 

A continuación, sólo acceder a su recuento de consulta estático como sigue:

<?= db::$query_count ?> 
Cuestiones relacionadas