2009-05-06 17 views
7

Esiste una funzione incorporata in PHP o MySQL che fornirà il numero totale di query MySQL utilizzate in una pagina? Ho visto su molti siti (principalmente forum) che hanno un messaggio in fondo che dice qualcosa come "Pagina generata in 0,6 secondi con 20 query".Come posso contare il numero totale di query MySQL utilizzate per pagina?

Se non c'è nulla di integrato, aggiungo qualcosa alla classe del mio database per contarli, ma sembra il tipo di funzionalità che sarebbe già disponibile.

risposta

6

Opzione uno sarebbe quello di passare tutte le vostre domande attraverso un wrapper:

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

Si prega di notare che è solo a scopo illustrativo e senza la gestione degli errori, ecc

Si potrebbe query MySQL per il numero di query eseguite:

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

si potrebbe desiderare di fare qualcosa di simile:

SHOW STATUS LIKE 'Com_%'; 

e quindi aggiungere insieme com_select, Com_update, Com_insert e Com_delete

+1

Grazie, "mostra stato" è esattamente quello che volevo. Sono andato con: SHOW STATUS WHERE Variable_name IN ('Com_select', 'Com_update', 'Com_insert', 'Com_delete') – DisgruntledGoat

3

Non c'è nulla nelle estensioni native di mysql/mysqli di PHP. Se stai utilizzando un livello di astrazione DB, potrebbe esserci un tipo di analisi/benchmark integrato che ti fornirà tali informazioni.

fuori mano, so Kohana fa questo con la libreria Profiler. Suppongo che la maggior parte delle librerie DB di framework faccia qualcosa di simile.

Se si è titubanti nell'utilizzare un framework di terze parti o un livello di astrazione del database, ho avuto successo semplicemente sottoclassando la classe incorporata di PHP5 PDO. È possibile aggiungere alcune informazioni di benchmark di base e conteggi delle query e passare le chiamate o execute() alla classe genitore.

4

Quello che faccio è creare una classe di query sql che conta, aggiunge 1 a una variabile chiamata querycount ogni volta che vengono eseguiti i metodi di query nella classe, In questo modo ho un totale parziale.

2

Al fine di evitare globali, nella classe db:

class db { 
    public static $query_count = 0; 

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

Poi basta accedere contare la query statico come questo:

<?= db::$query_count ?> 
Problemi correlati