SQL Daten aus DB zwischenspeichern oder erneute DB-Abfrage?

M

Mr. Snoot

Gast
Hio,

ich brauche Daten aus einer DB mehrmals, dazwischen erfolgt jedoch eine andere Ausgabe aus der DB.

Ist es jetzt sinnvoll, die Daten bei der ersten Abfrage bspw. in ein Array zu speichern und dieses weiter zu verwenden. Oder ist es von der Performance egal, ob ich die Daten zu einem späteren Zeitpunkt nochmal (ggf. auch öfter als zweimal) aus der DB hole (die Verbindung zur DB wird dazwischen nicht geschlossen)?

Sieht also bspw. so aus:
Code:
> Verbindung zur DB aufbauen

    > Datenbankausgabe [B][COLOR="Red"]A[/COLOR][/B]

    > Datenbankausgabe [B][COLOR="DarkGreen"]B[/COLOR][/B]

    > Datenbankausgabe [B][COLOR="red"]A[/COLOR][/B]

> DB-Verbindung beenden
 
Ich denke, dass es schneller ist die Daten zwischen zu speichern, da bei einer erneuten Abfrage das Statement wieder an den Server geschickt wird, dieser muss es Auswerten und die Daten zurückgeben.
Bin mir ziemlich sicher das es schneller geht wenn du de Daten in einem Array zwischen speicherst.

Am sichersten weißt du es aber, wenn du dir ein kleines Skript schreibst und es dort testest.
 
Durch "mysql_fetch_array()" bekommst du das Resultset doch sowieso als Array. Das würde ich auch einfach behalten, anstatt später nochmal zu holen. (Ich gehe mal einfach davon aus, dass du wie in den anderen Threads mit PHP/Mysql arbeitest)
 
Solange der RAM ausreicht ist eine Zwischenspeicherung wohl performanter. Wie groß der Vorteil ist hängt ab von
- der Komplexität des Statements sowie der Anzahl der zurückgelieferten Daten (=> Laufzeit der Abfrage)
- inwieweit die Datenbank einen QueryCache verwendet
- ob die Query auch tatsächlich im QueryCache gespeichert wird (große Queries landen darin z.B. oft nicht) und beim zweiten Mal noch gültig ist (wenn die Tabelle zwischendrin verändert wird werden alle Cacheinhalte die damit in Zusammenhang stehen könnten ungültig)
 
DerEineDa schrieb:
Durch "mysql_fetch_array()" bekommst du das Resultset doch sowieso als Array
Das stimmt natürlich; ich verwende ja viel lieber mysql_fetch_object, deswegen wär ich da nie drauf gekommen :)


Besonders viele Daten sinds nicht - ich merke auch beim Aufruf keine Verzögerungen; aber es sollte natürlich trotzdem optimal aufgebaut sein.

Es ist bspw. hier der Fall. Da habe ich links im Menü die ganzen Unterkapitel zu Grundlagen, welche ich auch in der Mitte im Inhaltsverzeichnis brauche. Sachen dieser Art habe ich immer mal wieder; mehr als sowas ist's also hier eigentlich nicht.
 
Optimierung an solchen Stellen ist wohl durchaus Zeitverschwendung...solange es kein Performanceproblem gibt lass es so wie es ist.
 
Da gebe ich BerniG recht.
Zudem solltest du auch noch in 4 Monaten verstehen wo die Daten herkommen. Sprich, Wartbarkeit spielt in dem Falle auch noch eine Rolle.
 
Es hängt immer vom zugriffsmusster der Datenbank ab. Hast du zuviel queries die deine einträge ändern oder löschen, in der zwischenzeit von A nach B und wieder nach A... dann stimmte deine A nicht mehr wenn du alles im speicher hälst! Zwischenspeichern ist gut wenn du den zugriff auf die datenbank sperrst (zumindest was schreiben oder ändern der daten angeht) oder bei einer statische Datenbank wo sich die informationen 1x am Tag sich ändern.
 
schreib dir nen kleinen bench
microsekunden am anfang messen und am ende, und die differenz a - b (schön formatiert mit 3 nachkommastellen) is dann die laufzeit. damit kannste es selber testen ;) aber ich sag auch zwischenspeichern is schneller.
 
Zuletzt bearbeitet:
Okay, werd ich machen, wenn alles komplett ist (ich hoffe bald :D).

So, habs jetzt mal getestet, Ergebnis: es gibt absolut keinen Unterschied.
 
Zuletzt bearbeitet:
Zurück
Oben