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

Assoziatve vs. numerische Arrays

vanGoss

Neues Mitglied
Gute Nacht zusammen,

Ich wollte mal wieder Expertenmeinungen einholen,diesmal wieder zu Performanceproblemen.

Und zwar geht es um Datenbankabfragen und die anschliesende Auswertung der Ergebnisse.
Wie gross ist der Zeitunterschied zw dem herauslesen aus einem associativen und einem numerischen Array?
Lässt sich ja mit 'mysql_fetch_assoc' oder 'mysql_fetch_array'(kann auch anders heisen, ich arbeitete immer nur mit dem ersten) erzeugen.

Dabei geht es mir nicht um eine einzelne Abfrage sonder vielmehr um sagen wir mal 500 Abfragen aud einer Seite.
Ist da der Seitenladezeitenunterschied enorm(jetzige Ladezeit um 0,1-1s).
Wuerde es sich lohnen, alle einzelnen Abfragen umzuformulieren?


Vielen Dank fuer eine Antwort
vanGoss
 
Entschuldigung das ich nicht vorher antworten konnte.

Warum bringt das nichts?
Der Gedanke war der, dass PHP ja jedesmal einen String durchsuchen muss, bzw. die Liste der Keys durchgehen muss und halt jeden einzelnen durchgehen muss. Bei Integern müsste das wesentlich schneller gehen.
Bei einem einzigen wäre das ja kein Problem, aber das summiert sich ja auf.
Oder ist das so unglaublich gering.

Danke für den Ratschlag.
Gruß
 
Das war ne grobe Abschätzung, soll ja eine Community sein und da sind nunmal viele verschiedenen Abfragen notwendig.
Können auch weniger sein aber ich wollt halt sicher gehn.

Gruß
 
vanGoss schrieb:
Der Gedanke war der, dass PHP ja jedesmal einen String durchsuchen muss, bzw. die Liste der Keys durchgehen muss und halt jeden einzelnen durchgehen muss.

Arrays in PHP sind Hashtabellen. Die Lookup-Zeit für einen Eintrag anhand seines Keys ist konstant.

Oder ist das so unglaublich gering.

Ja, ist es. Es ist vor allem aber selten sinnvoll, Lesbarkeit/Wartbarkeit des Codes „mutwillig“ zu verringern.
 
habs mir jetzt angeschaut, is echt interessant =)
ein glück, dass ich des ned ändern 'muss'

wenn du z.B. en Kommentarsystem hast, und da Informationen aus 2 verschiedenen Tabellen Informationen rauslesen willst, sind das pro Kommentar 2 Abfragen, d.h. also bei 10 Kommentare allein 20 Abfragen.
Wenn du also 10 Beiträge mit Kommentare anzeigen willst, hast du allein dafür schon 211/201 Abfragen
und dann hat man da ja immer noch iwas wer grad online is etc.
 
hallo,

ok ich werfe jetzt mal folgende Function ein: "mysql_fetch_object"

vielleicht kann jemand aufklären:
1) wie schnell kann php mit Objekten umgehen (im Vergleich zu Arrays)?
2) wäre es dir (vanGoss) überhaupt möglich auf OOP umzusteigen?

MfG Mario

PS: ich hoffe, ich konnte eventuell zu dieser späten Stunde noch einen Denkanstoß liefern.
 
hallo,

ok ich werfe jetzt mal folgende Function ein: "mysql_fetch_object"

vielleicht kann jemand aufklären:
1) wie schnell kann php mit Objekten umgehen (im Vergleich zu Arrays)?
2) wäre es dir (vanGoss) überhaupt möglich auf OOP umzusteigen?

MfG Mario

PS: ich hoffe, ich konnte eventuell zu dieser späten Stunde noch einen Denkanstoß liefern.

mysql_fetch_object() ist die langsamste Lösung.

Die Zeit die man bei mysql_fetch_array oder mysql_fetch_row oder anderen änhlichen Funktionen einsparen könnte ist sehr gering und wird nicht spürbar sein.
 
Zuletzt bearbeitet:
vanGoss schrieb:
wenn du z.B. en Kommentarsystem hast, und da Informationen aus 2 verschiedenen Tabellen Informationen rauslesen willst, sind das pro Kommentar 2 Abfragen, d.h. also bei 10 Kommentare allein 20 Abfragen.
Wenn du also 10 Beiträge mit Kommentare anzeigen willst, hast du allein dafür schon 211/201 Abfragen

Du kannst dir mit einer Abfrage mehr als einen Datensatz liefern lassen und du kannst Tabellen joinen.

- MySQL :: MySQL 5.5 Reference Manual :: 12.2.9.1 JOIN Syntax
- Coding Horror: A Visual Explanation of SQL Joins
 
2) wäre es dir (vanGoss) überhaupt möglich auf OOP umzusteigen?
des wär nicht des Problem, selbst wenn ichs noch nicht kennen würde, wärs toll zu lernen

Du kannst dir mit einer Abfrage mehr als einen Datensatz liefern lassen und du kannst Tabellen joinen.

- MySQL :: MySQL 5.5 Reference Manual :: 12.2.9.1 JOIN Syntax
- Coding Horror: A Visual Explanation of SQL Joins

macht das dann einen geschwindigkeitsgewinn aus?
dass es geht wusste ich, war aber eher unnötig, aber wenn das besser ist...
 
macht das dann einen geschwindigkeitsgewinn aus?
dass es geht wusste ich, war aber eher unnötig, aber wenn das besser ist...
Absolut! Du kannst das was du willst, mit einer einzigen Abfrage machen, anstatt über 200. Der Gewinn dürfte bei einem vielfachen liegen. Du musst aber darauf achten, dass du die Indizes richtig setzt.
 
Was immer Du in der Datenbank machen kannst, das sollst Du in der DB machen. Massendatenverarbeitung per SQL ist um Größenordnungen schneller als per PHP.
Immer genau die Daten per SQL ausgeben lassen, die Du brauchst: nicht mehr und nicht weniger.
Lieber zwei Stunden an einem SQL-Statement grübeln als eine Stunde an irgendwelchem Array-Durchlauf-Gewürge.
Steck' viel Mühe und Hitrnschmalz in den Tabellenaufbau, immer eingedenk der alten Weisheit: Data remains, code not.
Hab' Deine Indizes lieb, die sind so dankbar und so schnell.
 
@achtelpetit: darüber wird aber auch gestritten. Viele sagen solche Buisness-Logik gehört in die Applikation und die Datenbank ist nur ein dummer Datenspeicher. Das ganze natürlich ab einem gewissen Level der Komplexität.
 
Zurück
Oben