• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Geschwindigkeitsunterschied von num_rows|COUNT(*)

Status
Für weitere Antworten geschlossen.

CrackPod

Neues Mitglied
Hallo,

hier steht etwas von einem Geschwindikeitsunterschied zwischen num_rows und SELECT COUNT().
Ich frag mich nur, wofür man sich bei der COUNT() Methode auf count bezieht.
Code:
mysql_result($query,0);
würde es ja auch tun - es kommt bei beidem die Anzahl der Reihen/Datensätze raus.

Da ich zuerst nicht wusste was mysql_result macht, habe ich es nachgesehen, nun steht aber im manual etwas wiedersprüchliches:
they're MUCH quicker than mysql_result()
mysql_result is schneller wie mysql_result?!

Greetz
 
CrackPod schrieb:
mysql_result is schneller wie mysql_result?!
Nein, wenn du das ganze im deutschen manual nachguckst steht da:
Wenn auf Anfrageergebnisse mit vielen Datensätzen zugegriffen werden soll, sollten Sie Funktionen, die auf ganze Datensätze zugreifen,in Betracht ziehen (siehe unten). Diese Funktionen* liefern bei einem einzigen Aufruf den Inhalt mehrerer Felder und sind aus diesem Grund SEHR viel schneller als mysql_result()
*Empfohlende, leistungsfähigere Alternativen: mysql_fetch_row(), mysql_fetch_array(), mysql_fetch_assoc() und mysql_fetch_object().

Link: http://de3.php.net/manual/de/function.mysql-result.php
 
Achso, ich habe das * nicht gesehen.
Das heist, wenn ich dann
Code:
$count = mysql_fetch_row($query);
benutze ist es schneller als
Code:
$count = mysql_result($query, 0);
?
 
Achso.
Dann ist das mit fetch_row/object/array schneller als result oder hab ich da was falsch verstanden?
 
also ich hab jetzt mal selber ein bsp gemacht und alle mir bekannten Methoden genommen. Jetzt bin ich verwirrt, denn meistens ist mysql_result schneller als fetch_array 80% . Ab und zu dann doch wieder fetch_array. Evtl liegt es an meinem lokalen rechner, aber ich hab jetzt mal ein bsp hochgeladen:
http://legatiomortis.de/tests/count_test.php
http://legatiomortis.de/tests/count_test.phps <-- Der Quelltext, damit ihr das alles nachvollziehen könnt und evtl nen Fehler im Query oder des Benchmarks entdeckt.

Wenn aber alles richtig ist, würde das doch bedeuten, dass im Manual ein Fehler enthalten ist?!

Enjoy
 
Dann sind bei denen im Manual 1545 nicht viele Datensätze oder wie?
Ich kann die Datensätze ja mal erweitern und schaun, ob sich an der geschwindigkeit was ändert

//EDIT:
Auch mit 12201 Datensätzen ist mysql_result schneller...
Ich glaub, ich versteh da das Manual nicht 100%ig :wink:
 
zu zaehleReihen3:
- du vergleichst die count function von mysql mit der num_rows von php...
mysql ist einfach schneller. Da ist ne datenbank-engine dahinter die compiliert ist und nur solche sachen macht wie selecten, counten, löschen etc.

schon nur die tatsache, dass bei zaehleReihen3 12201 datensätze von der datenbank ausgelesen und in ein array im speicher geschrieben werden macht die sache langsamer als die anderen alternativen die du angeführt hast.

was der php manual mit:
When working on large result sets, you should consider using one of the functions that fetch an entire row (specified below).

meint ist, wenn du große result sets hast, nicht datenbanken.
In deinen $result (mit ausnahme vom $result von zaehleReihen3) befindet sich immer nur ein einziger eintrag "anzahl" den du dann ausliest.
d.h. nur eine zeile mit einer einzigen spalte.
Im $ result von zaehleReihen3 befinden sich 12201 zeilen die dann nachträglich php durchzählen muss ...

zur fetch_array funktion:
ist das gleiche problem. fetch_array wird gebraucht um schnell viel datensätze aus der mysql db zu holen(und ist darauf optimiert). Wenn du diese jetzt gebrauchst um ein array von 1x1 zu holen, versagt die.
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben