PHP: Was ist der Schnellste Weg, die Abfrage von MySQL? Weil PDO ist quälend langsam
Ich ausführen muss, um eine einfach Abfrage.
Buchstäblich alles, was ich durchführen müssen, ist:
SELECT price, sqft, zipcode FROM homes WHERE home_id = X
Wenn ich mit PHP PDO, die ich gelesen habe, ist der empfohlene Weg, um eine Verbindung zu einer MySQL-Datenbank, erstellen Sie einfach die Verbindung dauert gemessen 610ms.
Mein code ist unten:
try {
$conn_str = DB . ':host=' . DB_HOST . ';dbname=' . DB_NAME;
$dbh = new PDO($conn_str, DB_USERNAME, DB_PASSWORD);
$params = array();
$sql = 'SELECT price, sqft, zipcode FROM homes WHERE home_id = :home_id';
$params[':home_id'] = X;
$stmt = $dbh->prepare($sql);
$stmt->execute($params);
$result_set = $stmt->fetchAll(PDO::FETCH_ASSOC);
//json output
ob_start("ob_gzhandler");
header('Content-type: text/javascript; charset=utf-8');
print "{'homes' : ";
print json_encode( $result_set );
print '}';
ob_end_flush();
$dbh = null;
} catch (PDOException $e) {
die('Unable to connect');
}
Frage: Was ist der Schnellste Weg für mich eine Verbindung zu meiner MySQL-Datenbank zum ausführen der Abfrage oben?
- Sie haben Indexmenge in home_id? Sie sind die Verbindung über localhost? Versuchen Sie, zu verwenden, mysql_* oder mysqli_* (ie mysqli_connect, mysqli_query etc)
- Yep, ich habe einen index auf home_id. Mein web-server auf einem anderen physischen server als meiner MySQL-Datenbank-server
- Das ist der Hauptgrund Ihrer Probleme. Sie könnten versuchen, die Zwischenspeicherung Ihrer Daten in session/gespeicherten Dateien.
- wenn Ihr web-server auf einer anderen physischen Maschine aus Ihrer MySQL-Datenbank, Netzwerk-Latenz ist sehr wahrscheinlich Schuldigen, auch wenn Sie sitzen direkt nebeneinander im gleichen Raum.
- Sind Sie sicher, es ist die Bibliothek problem, nicht bestimmten server ein?
- +1 für eine langsame Netzwerk-Verbindung zwischen dem client und dem server
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schnellsten möglich :
[EDIT]: Jetzt mit mysqli anstelle von mysql.
Wenn die Langsamkeit ist wegen zu erreichen, die über das Netzwerk für jede Verbindung, und mysql zu tun, ein reverse-DNS-lookup, um zu überprüfen, die durch Ihre Zuschüsse Tisch, dann dieser Aufwand kann sehr gut Konto für einen großen Teil der Latenz. Der Wechsel zu persistenten verbindungen wäre es ein one-time-Kosten für die Lebensdauer der Verbindung.
Aber dies führt zu anderen Problemen. Da die Transaktionen ein Rollback ausgeführt und die sperren freigegeben, wenn die Verbindung hielt Sie geschlossen ist, geht persitent bedeutet, dass Sie aktiv bleiben. Ohne große Sorgfalt in Ihrem code nicht verlassen, um die Verbindung in einem inkonsistenten Zustand, könnte man sehr gut einen deadlock erstellen, oder zumindest sperren Sie alle anderen verbindungen, bis Sie gehen in manuell und sauber.
Denke PDO ist so schnell wie MYSQLI.
Ich glaube, dein problem ist, wie Sie eine Verbindung mit PDO.
Vermutlich dein connectionstring sieht wie folgt aus:
Und da ist das problem... PDO versucht, eine Verbindung zu localhost aber PDO verwendet, die DNS zu drehen localhost in 127.0.0.1 und das ist, was Zeit kostet.
Wenn Sie verwenden 127.0.0.1 direkt Sie haben nicht diese Probleme mehr 🙂
Damit der connectionstring muss das Aussehen
127.0.0.1
beginnt früher, mit Abfragen Daten als dielocalhost
Lösung.seit version php 5.3.0 die Schnellste und leichteste Art des Aufrufs in der db von php ist wie folgt:
In diesem Beispiel wird die mysql/ext (nicht mysqli) und Aufrufe von gespeicherten Prozeduren
Die gespeicherte Prozedur: