DB-Abfrage mit Schleife schneller bei $data['ID']=$id?

  1. Jakob

    Jakob Thread Starter MacUser Mitglied

    Mitglied seit:
    05.01.2004
    Beiträge:
    1.067
    Zustimmungen:
    21
    Hallo,

    wenn ich in einer Schleife aus einer DB etwas auslese und bei jedem Schleifendurchgang mehrfach auf eine Zelle zugreifen muss, bringt es einen Geschwindigkeitsvorteil, wenn ich die Zelle als Variable definiere?

    also statt
    PHP:
    while($data $produkte->fetchRow())
    {
      
    $data['ID'];
      
    // […]
      
    $data['ID'].$data['ID'].$data['ID'];
    }
    das:
    PHP:
    while($data $produkte->fetchRow())
    {
      
    $data['ID'] = $id;
      
    $id;
      
    // […]
      
    $id.$id.$id;
    }
    Ich weiß, ich könnte es messen, aber vll. weiß es ja schon jemand, oder ihr bezeichnet das gleich von vornerein als Schwachsinn :)
     
    Jakob, 11.07.2006
    #1
  2. koli.bri

    koli.bri

    Ich würd sagen:

    Es bringt keinen Vorteil, eher einen Nachteil, da noch ein Zwischenschritt eingebaut wird.
    Er greift mit $date['feld'] ja nicht auf die Datenbank zu, sondern auf die bereits gespeicherten Daten. Ob die jetzt ein einer Variablen oder in einem Array liegen, das sollte keinen Unterschied machen.

    Also->

    Da kein Datenbankzugriff besteht, ist die Frage, ob Variablen oder Arrays schneller sind. Und das ist, salopp gesagt, scheißegal :)

    gruß
    Lukas
     
    koli.bri, 12.07.2006
    #2
  3. wegus

    wegus MacUser Mitglied

    Mitglied seit:
    13.09.2004
    Beiträge:
    14.982
    Zustimmungen:
    1.545
    Arrays erstellen/verändern in PHP ist ( da assoziativ ausgelegt) langsamer. Definitiv kann ich das für PHP4 sagen, ob das in PHP5 besser wurde habe ich bisher nicht geprüft. Merken tut man das aber erst ab einigen 1000den Elementen!

    Der Zugriff auf bestimmte Einträge in Array ist jedoch ( eben wegen der assoziativen Arrays) sehr schnell. Das kann man seelenruhig tun! Genau dafür ist diese Art von Arrays gewählt worden. Ich selbst speichere solche Resultset immer in Arrays von Objekten (Produkte, Kunden,Rechnungen,...)
     
    wegus, 12.07.2006
    #3
  4. Jakob

    Jakob Thread Starter MacUser Mitglied

    Mitglied seit:
    05.01.2004
    Beiträge:
    1.067
    Zustimmungen:
    21
    Vielen Dank, besonders für die Assoz-Erklärung von Dir, wegus. Heißt das, der Zugriff per $data['ID'] ist genauso schnell wie $data[0]?

    PHP baut alle Arrays als Hashes auf, somit ist sowohl die 0 als auch die ID nichts weiter als ein Key für den Hash! Es sollte also gleichschnell sein.
    Die andere Implementierung sind dann echte Speicherblöcke (malloc in C), bei denen dann für ein Array mit 1000 Elementen auch wirklich 1000x Speicherplatz reserviert wird. Bei PHP führt ein singuläres $data[1000]=12 zu exakt nur einer Belegung. Daher braucht man auch den foreach iterator, weil man auf eine geschlossene key-Folge nicht wirklich bauen kann. Was ich hier schreibe beschreibt aber im Wesentlichen PHP4, da ich zur Zeit auf ein Java-basiertes Intranet setzen muß, bin ich bei PHP nicht mehr auf dem aktuellen Stand. Man möge mich daher bitte unbedingt korrigieren.
     
    Jakob, 12.07.2006
    #4
  5. wegus

    wegus MacUser Mitglied

    Mitglied seit:
    13.09.2004
    Beiträge:
    14.982
    Zustimmungen:
    1.545
    für PHP4 ist 0 genauso ein Hash-Key wie 'ID', beides ist das Gleiche. Ob das bei PHP5 noch exakt gleich gehandelt wird weiß ich nicht, weil ich beruflich zur Zeit nach Java wechseln muß und nur noch sporadisch PHP mache.

    Gegenstück zum Hashing sind dann Speicherblöcke die für Array allociert werden, etwa wie in C. Ein Array mit 1000 Elementen verbaraucht dabei auch leer gleich den vollen Speicherplatz. Bei PHP wir nur für belegte Keys auch ein Element gespeichert. Daher braucht man auch den foreach-Operator. Eine Key-Folge muß nämlich nicht kontinuierlich sein. Der Zugriff auf Hashschlüssel ist dadurch sehr schnell, der Speicherverbrauch optimal - nur die Änderung der Struktur dauert eben länger, weswegen Arrayoperationen immer teuer sind.
     
    wegus, 12.07.2006
    #5
Die Seite wird geladen...
Ähnliche Themen - Abfrage Schleife schneller
  1. xenon96
    Antworten:
    2
    Aufrufe:
    578
    xenon96
    27.06.2015
  2. max@hismac
    Antworten:
    2
    Aufrufe:
    1.609
    pmau
    27.03.2014
  3. max@hismac
    Antworten:
    0
    Aufrufe:
    2.352
    max@hismac
    09.05.2013
  4. max@hismac
    Antworten:
    2
    Aufrufe:
    1.853
    nightcoding
    02.06.2012
  5. cym
    Antworten:
    4
    Aufrufe:
    552
    TheFallenAngel
    17.12.2006