PHP: mysql vs mysqli vs pdo – Performance

18 02
2010

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

Avatar

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

Avatar

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.

Avatar

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

Avatar

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.

Kommentar

top