Homepage selbermachen 7.852 Themen, 35.619 Beiträge

@ Borlander bezüglich mysql_fetch_row

Heinz_Malcher / 4 Antworten / Baumansicht Nickles

Hallo Borlander, vielleicht kannst du dich noch erinnern, dass wir letztens ein Posting hatte, in dem es darum ging, was schneller ist: mysql_fetch_row
oder mysql_fetch_object

Ich stehe gerade vor der entscheidung, auf was ich bauen soll, da ich zur zeit etwas umrüste.

Was würdest du nehmen?

Gruss Heinz

bei Antwort benachrichtigen
Borlander Heinz_Malcher „@ Borlander bezüglich mysql_fetch_row“
Optionen

Hallo Heinz,
ich kann mich noch gut dran erinnern.

Hab noch mal schnell die PHP-Referenz aufgeschlagen.
Zitat zu mysql_fetch_object:
"Unter Berücksichtigung der Ausführungsgeschwindigkeit ist diese Funktion identisch zu
mysql_fetch_array() und fast so schnell wie mysql_fetch_row() (der Unterschied ist unwesentlich)."


Die entscheidene Frage lautet dann natürlich: Wann macht sich unwesentlich bemerkbar?
Höchstwahrscheinlich erst bei sehr vielen zurückgegebenen Datensätzen.

Viel interessanter ist sicher der Nutzungsumfang beider Funktionen:
Zu mysql_fetch_row:

  • ist etwas schneller
  • Felder können nur über die Feldnummer angesprochen werden
    • Will man nur eine Tabelle aller zurückgegebenen Datensätze (mit for-Schleife) Anzeigen braucht man wirklich nicht mehr.
    • Braucht man allerdings ein spezielles Feld ist das ungünsting, falls sich die DB oder die Abfrage später mal ändert

Zu mysql_fetch_object:
  • ist etwas langsamer
  • Felder können nur über die die Object-Eigenschaft angesprochen werden
    • Feldname kann AFAIK nicht als String übergeben werden
    • Will man nur eine Tabelle aller zurückgegebenen Datensätze Anzeigen ist das aufwending, weil man alle Felder manuell festlegen muss und nicht mit der for-Schleife durchlaufen lassen kann. Ist bei späteren Änderungen wieder nicht so schön
    • Braucht man allerdings ein spezielles Feld macht das nichts (solange sich der Feldname nicht ändert ;-) )

Noch mal zu mysql_fetch_array:
  • ist genauso schnell wie ~object
  • Felder sowohl über die Feldnummer als auch über den Feldnamen ansprechbar
    • Feldname kann im Gegensatz zu ~object als String übergeben werden
    • Will man nur eine Tabelle aller zurückgegebenen Datensätze Anzeigen funktioniert das genauso gut wie mit ~row
    • Braucht man allerdings ein spezielles Feld kann man es wie bei ~object über den Namen ansprechen (und hat damit bei späteren Änderungen der DB oder Abfrage keine Zusätzliche arbeit)
  • Vereint IMHO bei Zugriff auf die Felder die Vorteile von ~row und ~object bei gleicher Geschwindigkeit von ~object


Ich würde ~row wenn überhaupt nur zur Ausgabe von Tabellen verwenden, ansonsten ~array.

Zur Geschwindigkeit: Hat Xafford evtl. Erfahrung damit und kann uns verraten ob man den Unterschied wirklich merken (ich glaube kaum das man das merkt) kann?


CU Borlander
bei Antwort benachrichtigen
Heinz_Malcher Borlander „Hallo Heinz, ich kann mich noch gut dran erinnern. Hab noch mal schnell die...“
Optionen

Hi, danke für die genaue Ausführung. Habe beides mal getestet, und wirklich 0 Unterschied gemerkt, ansonsten verwende ich meisstens row. Würde mich auch interessieren, ob Xafford da erfahrungen gemacht hat

bei Antwort benachrichtigen
xafford Borlander „Hallo Heinz, ich kann mich noch gut dran erinnern. Hab noch mal schnell die...“
Optionen

man kann, aber nur in grenzsituationen. ich habe vor einiger zeit eine größere intranet-datenbankverwalötung für adressdaten geschrieben. dazu musste ich auch eine schnittstelle schreiben, um komplett alle daten der datenbankl in ein array zu lesen (unelegant, war aber nötig). es handelte sich um ca 15.000 datensätze mit jeweils ca 25 feldern.
das problem bei mysql_fetch_array ist, daß im vergleich zu mysql_fetch_row die doppelte menge an speicher genutzt wird (auch unelegant, 50% mehr hätten gereicht wenn ein pointer genutzt worden wäre), da einmal der wert mit dem index und einmal der wert mit dem feldnamen gespeichert wird.
ich bin dann zur verwendung von mysql_fetch_assoc übergegangen, da es für mich genügte die felder mit feldnamen auslesen zu können.
im normalfall bei nicht zu großen anfragen wird aber die nutzung keinen großen unterschied machen.

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
Borlander xafford „man kann, aber nur in grenzsituationen. ich habe vor einiger zeit eine größere...“
Optionen

Muss ne neue Funktion sein, ich kann sie in meiner Referenz (Ende2001/Anfang2002) noch nicht finden.

Das mit der Speichernutzung ist allerdings eine sehr interessante Sache. Darüber hatte ich mir bisher gar keine Gedanken gemacht.


CU Borlander

bei Antwort benachrichtigen