Hier ist ein einfacher Test, den ich lief, um eine schnelle Vorstellung der Leistungseinbuße zu erhalten, die ich für die Verwendung von MySQL PDO vorbereiteten Aussagen im Vergleich zu einer direkten Abfrage zahlen würde. In der Personentabelle gibt es 2801 Zeilen. MySQL Version 5.5.28 und PHP Version 5.3.15. Vanille-Installationen, mit welchen Standard-Parametern auch immer. Tests laufen auf einem iMac mit 8 GB.MySQL PDO schneller vorbereitet als Abfrage? Das ist, was dieser einfache Test zeigt
$pdo = new PDO('mysql:host=localhost;dbname=cwadb_local', 'root', "");
$start = microtime(true);
for ($i = 0; $i < 200; $i++) {
$pdo->query("select * from person where name_last = 'smith' or true");
}
echo "<p>query: " . (microtime(true) - $start);
$start = microtime(true);
for ($i = 0; $i < 200; $i++) {
$stmt = $pdo->prepare("select * from person where name_last = :last or true");
$stmt->execute(array('last' => 'smith'));
}
echo "<p>prepare/execute: " . (microtime(true) - $start);
und dies war die Ausgabe:
query: 21.010436058044
prepare/execute: 20.74036192894
, die überhaupt keine Strafe zeigt. Möglichkeiten:
Caching der vorbereiteten Anweisung funktioniert wirklich. (Beachten Sie, dass ich die Vorbereitungsfunktion innerhalb der Schleife beibehalten habe.)
Es ist ein Scheintest, weil es zu einfach ist.
Es gibt keinen theoretischen Grund, warum prepare/execute langsamer sein sollte, und die Entwickler von MySQL/PDO/PHP haben sich die Mühe gemacht, sie schneller zu machen, um uns alle zum Schweigen zu bringen .
Andere? viele Male hier gesagt worden, dass die Verwendung von vorbereiteten Anweisungen ist sicherer als Abfrage und mit den genannten Parametern in PDO
Es ist (Mysqli nicht, sie hat), mit den Parametern zu tun ziemlich bequem ist. Aber es wird genauso oft angemerkt, dass es eine Leistungseinbuße gibt, wenn die Anweisung bei jeder Ausführung vorbereitet werden muss.
Kann jemand also einige Tests liefern, die meinem einfachen Test widersprechen? Oder sollen wir gerade zugeben, dass es keinen Grund gibt, keine vorbereiteten Aussagen zu verwenden?
1) Super 2) Ja 3) "Wen interessiert's?" - Verwenden Sie vorbereitete Aussagen. –
Nur um es zu versuchen, versuchen Sie es erneut mit mehr Abfragen und versuchen Sie auch, die Reihenfolge zu tauschen (zuerst vorbereitet). – Supericy
Ich hätte gedacht, dass vorbereitete Anweisungen _faster_ als direkte Abfragen erwartet werden, auf der Grundlage, dass das SQL in der vorbereiteten Anweisung jedes Mal dasselbe ist. Dadurch kann die Abfrageanalyse im Datenbankserver zwischengespeichert werden. Dies ist nicht möglich, wenn Sie nicht vorbereitete 'WHERE'-Klauseln ständig ändern. – halfer