2009-05-06 4 views
7

Gibt es eine eingebaute Funktion in PHP oder MySQL, die die Gesamtzahl der auf einer Seite verwendeten MySQL-Abfragen liefert? Ich habe auf vielen Seiten (hauptsächlich Foren) gesehen, dass sie unten eine Nachricht haben, die etwas wie "Seite erzeugt in 0,6 Sekunden mit 20 Abfragen" sagt.Wie kann ich die Gesamtzahl der MySQL-Abfragen pro Seite zählen?

Wenn nichts eingebaut ist, füge ich etwas zu meiner Datenbankklasse hinzu, um sie zu zählen, aber es scheint die Art von Funktionalität zu sein, die bereits verfügbar wäre.

Antwort

6

Option würde man alle Ihre Anfragen durch einen Wrapper übergeben sein:

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

Bitte beachten Sie, dass für Abbildung ist nur und ohne Fehlerbehandlung usw.

Sie könnten MySQL Abfrage für die Anzahl der Abfragen ausführen:

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

Sie könnten wie etwas tun:

SHOW STATUS LIKE 'Com_%'; 

und fügen Sie dann zusammen Com_select, Com_update, Com_insert und Com_delete

+1

Danke, 'Status anzeigen' ist genau das, was ich wollte. Ich ging mit: SHOW STATUS WHERE Variablenname IN ('Com_select', 'Com_update', 'Com_insert', 'Com_delete') – DisgruntledGoat

3

In die nativen mysql/mysqli-Erweiterungen von PHP ist nichts eingebaut. Wenn Sie eine DB-Abstraktionsschicht verwenden, kann eine Art von Analyse/Benchmarking eingebaut sein, die Ihnen diese Informationen liefert.

Off-Hand, ich weiß Kohana tut dies mit der Profiler Bibliothek. Ich würde annehmen, dass die DB-Bibliotheken der meisten Frameworks etwas Ähnliches tun.

Wenn Sie zögern, ein Framework oder eine Datenbankabstraktionsschicht von Drittanbietern zu verwenden, habe ich Erfolg gehabt, indem ich die in PHP5 eingebaute Klasse PDO einfach unterklassifiziert habe. Sie können einige grundlegende Benchmarkinformationen und Abfragezählungen hinzufügen und die Anrufe query() oder execute() an die Elternklasse weiterleiten.

4

Was ich mache ist eine SQL-Abfrage-Klasse, die zählt, fügt es eine Variable namens querycount jedes Mal, wenn die Abfrage-Methoden in der Klasse ausgeführt werden, auf diese Weise habe ich eine laufende Summe.

2

Um Globals zu vermeiden, in der db-Klasse:

class db { 
    public static $query_count = 0; 

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

Dann greifen Sie einfach Ihre statische Abfrage wie folgt zählen:

<?= db::$query_count ?> 
Verwandte Themen