0251 / 590 837 15
info@a-coding-project.de

PHP-Geschwindigkeitstest: mysql_fetch_row vs. mysql_fetch_assoc

PHP Logo

PHP Logo

mysql_fetch_row und mysql_fetch_assoc sind PHP-Funktionen zum Auslesen der Daten von Datenbankabfragen. Sie werden im Quellcode oft benötigt und deswegen sollte man sich für die richtige Funktion entscheiden.

mysql_fetch_row liefert ein Array, mit welchem man über den Spaltenindex auf die Daten zugreifen kann. In mysql_fetch_assoc ist kann man über die Spaltennamen zugreifen.

Doch was ist wirklich schneller? Der folgende Test soll und eine Antwort darauf geben.

Funktion mysql_fetch_assoc:

$Ergebnis = mysql_query(„SELECT * FROM tabelle LIMIT 0,100000“);
while($row=mysql_fetch_assoc($Ergebnis)){
$test = $row[’spalte1′].$row[’spalte2′].$row[’spate3′].$row[’spalte4′];
}

Funktion mysql_fetch_row:

$Ergebnis = mysql_query(„SELECT * FROM tabelle LIMIT 0,100000“);
while($row=mysql_fetch_row($Ergebnis)){
$test = $row[0].$row[1].$row[2].$row[3];
}

Dieser Code wurde mit 100, 1.000 und 100.000 Datensätzen getestet (das Limit wurde geändert). In der Tabelle waren 250.000 Datensätze vorhanden. Jeder Test wurde 15-mal gemacht und die hier stehenden Daten sind die Durchschnitte.

Ergebnisse

100 Datensätze

mysql_fetch_row: 0,0018270969391 Sekunden

mysql_fetch_assoc: 0,0030710220337 Sekunden

mysql_fetch_row ist 40% schneller als mysql_fetch_assoc

1.000 Datensätze

mysql_fetch_row: 0,0130335013072 Sekunden

mysql_fetch_assoc: 0,0126913388570 Sekunden

mysql_fetch_assoc ist 3% schneller als mysql_fetch_row

100.000 Datensätze

mysql_fetch_row: 0,9411172231038 Sekunden

mysql_fetch_assoc: 1,2011907100678 Sekunden

mysql_fetch_row ist 22 % schneller als mysql_fetch_assoc

Kompletter Test

Den kompletten Test mit allen Durchläufen kannst du hier herunterladen:

http://blog.stevieswebsite.de/tests/mysql_fetch_row_vs_mysql_fetch_assoc.xls

Fazit

mysql_fetch_row ist schneller als mysql_fetch_assoc. Wenn Du also auch mit Indexen arbeiten kannst, solltest du das tun. Wenn du die Spaltenbezeichnungen trotzdem sehen willst, kannst du diese einfach in den SQL-Befehl packen.