Heute kam es zu einem interessanten Gespräch zwischen “meinem” Praktikanten ( angehender Informatiker ) und mir:
Es ging um das Thema Datenbank-Zugriffe auf eine MySQL-Datenbank, Vorteile einer Wrapper-Klasse für Datenbank-Anfragen anstatt der nativen PHP-Befehle usw.
Im Laufe des Gesprächs kamen wir auf das Thema Performance zu sprechen, wobei ich jedoch keine praktischen Beispiele zur Hand hatte.
Google spuckte keine brauchbaren Ergebnisse aus und die wenigen gefundenen Seiten, waren entweder nicht wirklich objektiv (angeblich mysqli am schnellsten) oder hatten relativ praxisfremde Tests mit den oben genannten Datenbank-Funktionen / Klassen.
Aus diesem Grund habe ich einen eigenen Test mit einem praxisüblichen simplen SQL-Query auf eine Tabelle mit ~220.000 Einträgen mit 1 primary key, 1 foreign key und 7 weiteren Spalten geschrieben.
Der Query lautet: “SELECT * FROM tabellenname;”
Für den Test wurde jeweils eine neue Datenbankverbindung aufgebaut und die nativen PHP-Funktionen / Methoden für einen “normalen” Query ohne prepare-Statement genutzt. Nach der Herstellung der Verbindung wurde die Zeitmessung mit microtime() gestartet, das Statement an die Datenbank geschickt und anschließend die Differenz zwischen beiden Zeiten errechnet. Um das Ergebnis möglichst repräsentativ zu machen, wurde das Query 500 mal wiederholt mit jeweils 3 Sekunden Pause zwischen jeder Abfrage und der Durchschnitt gebildet.
Das Ergebnis:
| mysql | ∅ 0,37426 Sek |
| mysqli | ∅ 0,51223 Sek |
| pdo | ∅ 0,37269 Sek |
Über das Ergebnis bin ich überrascht. Scheinbar sind mysql und PDO nahezu gleichauf, das mehrfach auf Grund seiner Performance gelobte mysqli recht “weit” abgeschlagen.
Ob mysqli seine Vorteile erst mit prepared-Statements und Datenbank-Objekten voll ausschöpfen kann, muss noch geprüft werden…
4 Kommentare to PHP: mysql vs mysqli vs pdo – Performance
Jan Brinkmann
20 Mai 2010 um 23:09
Huhu
Hätte ich ja nicht gedacht. Vom Gefühl her (ohne getestete Hintergründe) hätte ich vermutet PDO ist langsamer. Hast Du noch weitere Benchmarks mit prepared Statement etc mal noch gemacht?
Gruss, Jan
admin
26 Mai 2010 um 14:37
War eigentlich der gleichen Meinung, dass PDO am langsamsten sein müsste…
Gemäß dem getesteten Fall war es dann doch nicht so
Habe leider noch keine Benchmarks mit prepared Statements machen können auf Grund von Zeitmangel.
Werde ich aber auf jeden Fall noch nachholen und meine Ergebnisse online reinstellen.
geronimo
24 Oktober 2010 um 17:20
Hier habe ich noch ein paar Benchmarks für euch gefunden:
http://jonathanrobson.me/2010/06/mysqli-vs-pdo-benchmarks
admin
15 November 2010 um 16:25
Besten Dank für den Link.
Auf jeden Fall liefert die Website und die durchgeführten Tests einige Rückschlüsse auf die Performance. Werde diese bald, wenn ich wieder bisschen mehr Zeit habe, ausgiebig testen und vergleichen und hier ein Update zum Thema über meine Erfahrungen posten.