2009-07-23 1 views
2

Ich habe eine extrem große MySQL-Datenbank (ca. 1 Million Elemente) und bin eine ziemlich komplexe Abfrage auf dieser Datenbank. Es dauert ungefähr 2 Sekunden, wenn ich den SQL-Befehl in phpMyAdmin eingebe, aber es dauert ungefähr 1-2 Minuten, um dieselbe Ausgabe mit PHP-Code zu erzeugen.Datenbank-Befehl läuft glazial in meinem PHP-Skript, schnell in phpMyAdmin

Warum sollte es einen solchen Zeitunterschied geben? Wenn es eine schlecht ausgeführte Abfrage wäre, würde es nicht lange dauern, bis die Ergebnisse auch in phpMyAdmin angezeigt werden.

+0

Sie sollten wahrscheinlich Ihre Frage posten, oder etwas Spezifisches. Es ist sehr schwierig zu diagnostizieren, mit nichts zu arbeiten. Wenn ich raten müsste, würde ich sagen, dass Sie vielleicht in Abfrage-Caching laufen (dh Sie haben es zuerst in PHP und dann in phpMyAdmin ausgeführt und es wurde bereits zwischengespeichert). Das würde völlig davon abhängen, wie Sie auf dieses Problem stoßen. Können Sie weitere Einzelheiten angeben? – zombat

Antwort

3

Es ist sehr gut möglich, dass das PHP-Skript etwas zusätzlich zur einfachen Ausführung der Abfrage ausführt (z. B. das Mischen riesiger Datenmengen). Können Sie uns den PHP-Code zeigen, der Ihre SQL ausführt?

Beachten Sie, dass , wenn Sie nicht die Ausgabe-Pufferung auf erhalten haben, und Ausgabe von Stück der Datenstück an den Client, dass werden Sie verlangsamen viel, da es so viele kleine Stücke an den Client sendet, anstelle von einem großen Brocken. Schauen Sie sich output buffering in PHP an.

In seiner einfachsten Form:

ob_start(); 
// Output lots of data here. 
ob_end_flush(); 

phpMyAdmin optimiert ist, große Datenmengen zu verarbeiten. Sehen Sie sich seinen internen Code an, um zu sehen, wie er Daten von einer Abfrage abruft. Dies könnte hilfreich sein.

Auch ich nehme an, dass Sie phpMyAdmin auf dem gleichen Server wie Ihr Skript haben?

+0

Vielen Dank. Meine App ist jetzt schneller. Dankbare Dankbarkeit, da Ihr Snip brauchbar war ... mit den PHP-Anweisungen allein gelassen, hätte ich es nie ausprobiert! – Smandoli

6

Sind Sie sicher, dass Sie genau die gleiche Ausgabe erhalten?

Wenn Sie Daten in Ihrer Datenbank haben, wie viele Zeilen gibt Ihre Abfrage zurück?

Wenn Sie eine Abfrage mit phpMyAdmin starten, wird automatisch die Seitennummerierung hinzugefügt.

Also, mit dieser ersten Abfrage:

select * 
from test 

phpMyAdmin führt eigentlich diese:

select * 
from test 
limit 0, 30 

Wenn Sie nicht über diese Grenze in der Abfrage (wenn es von Ihrem PHP-Skript ausgeführt wird), könnte es den Unterschied erklären: das Holen von 30 Zeilen und das Holen von Hunderten/Tausenden/mehr Zeilen benötigt nicht die gleiche Menge an Zeit (dasselbe für das Rendern von diesen).

Wenn Sie Limit in Ihrer Abfrage verwenden und/oder nicht versuchen, viele Zeilen zu erhalten, können Sie Ihren Code posten?

(Ein weiterer possibile Grund Abfrage-Cache wäre: zum ersten Mal die Abfrage ausgeführt wird, ist es viel Zeit in Anspruch nimmt, nächste Mal, hat MySQL die Ergebnisse im Cache gehalten)