MySQLi-Test: ASSOC vs ARRAY vs OBJECT

Geschrieben am 01.09.2014 um 22:26 von

Ich habe mir über die Jahre angewöhnt mysql_fetch_assoc() bzw. fetch_assoc() zu verwenden. Mein aktueller Stand war, dass fetch_assoc() die schnellste Variante verglichen mit fetch_array() und fetch_object() ist. Dass das nicht verkehrt war, sieht man z.B. hier. Es wurden allerdings die alten Befehle der MySQL-Extension getestet und der Test ist wohl einige Jahre her. In dieser Zeit hat sich vieles getan. Die MySQL-Extension ist in den neusten PHP-Versionen nicht mehr vorhanden. Stattdessen muss man MySQLi oder PDO benutzen. Ich hab heute daher einfach mal die Funktionen von MySQLi getestet.

Getestet wurde auf meinem lokalen Server:
Prozessor: AMD A10-5757M
RAM: 8 Gigabyte
Software:
– Linux Mint 14.10 (64 Bit)
– nginx/1.4.6 (Ubuntu)
– PHP 5.5.9-1ubuntu4.3
– mysql 5.5.38
Der lokale Server wurde in keinster Weise zuvor optimiert, d.h. keine Caching-Funktionen etc. pp. wurden aktiviert.

Meine Datenbank beinhaltete ca 3 Millionen Datensätze – 1 Tabelle mit 3 Spalten (int, string, int). Mit jeder oben erwähnten Funktion wurden 10000, 50000, 100000, 500000, 1000000, 1200500 und 2000000 Datensätze jeweils 6 Mal aus der Datenbank geholt. Der Vorgang bei dem die Abfrage ausgeführt wird, wurde mit Hilfe von microtime() und Differenzbildung von End- und Startzeit vermessen. Die Mittelwerte und Standardabweichungen (absolut und relativ) wurde berechnet. Mit Hilfe des Mittelwertes wurde die unten erzeugte Grafik erzeugt. Die Abszissenachse wird zur besseren Darstellung logarithmisch aufgetragen.

Der Gewinner: fetch_assoc und fetch_array sind gleich gut!
Der Gewinner: fetch_assoc und fetch_array sind gleich gut!

Zusammenfassung

Da hat sich so einiges getan. Die Ergebnisse sind natürlich stark von der Serverhardware abhängig. Die Grafik oben zeigt eines ganz gut:

  1. fetch_assoc() und fetch_array() sind gleich gut – und das auch bei sehr vielen Datensätzen
  2. im Bereich zwischen 800000 und etwa 1.5 Millionen Datensätzen, scheint fetch_array() minimal besser zu sein, das könnte aber auch auf Messfehler zurückzuführen sein
  3. Bis ca 100000 Datensätze sind die Unterschiede zwischen den drei Methoden sehr klein
  4. Ab 100000 Datensätzen wird fetch_object() deutlich langsamer, je mehr Datensätze es werden, desto schlechter wird diese Methode

Fazit

Mit der Verwendung von mysql_fetch_assoc() bzw. fetch_assoc() bin ich in der Vergangenheit ganz gut gefahren. Ich werde das so beibehalten. Weitere Tests mit z.B. echten Datensätzen und auf echter optimierter Serverhardware wären interessant und stehen bereits auf der ToDo-Liste. Wer mit großen Datensätzen und PHP zu tun hat, der sollte auf fetch_object() verzichten. 

"MySQLi-Test: ASSOC vs ARRAY vs OBJECT" bewerten

Der Artikel ist schlecht!Der Artikel ist verbesserungswürdig!Der Artikel ist ganz gut.Der Artikel ist richtig gut!Der Artikel ist perfekt! Danke! (1 Bewertungen mit durchschnittlich 5,00 von 5 Sternen)
Loading...

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*

© 2016 » Die Seite rennt auf PHP 7 und HTTP 2.0 ♥

Konnten wir Ihnen mit dieser Seite behilflich sein?

Danke für die Bewertung!

Könnten wir noch etwas verbessern, damit Sie zufriedener sind?