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

Dieses Thema im Forum "Web-Programmierung" wurde erstellt von Jakob, 11.07.2006.

  1. Jakob

    Jakob Thread Starter MacUser Mitglied

    Beiträge:
    1.067
    Zustimmungen:
    21
    MacUser seit:
    05.01.2004
    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 :)
     
  2. koli.bri

    koli.bri Gast

    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
     
  3. wegus

    wegus MacUser Mitglied

    Beiträge:
    15.045
    Zustimmungen:
    1.318
    MacUser seit:
    13.09.2004
    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,...)
     
  4. Jakob

    Jakob Thread Starter MacUser Mitglied

    Beiträge:
    1.067
    Zustimmungen:
    21
    MacUser seit:
    05.01.2004
    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.
     
    Zuletzt von einem Moderator bearbeitet: 12.07.2006
  5. wegus

    wegus MacUser Mitglied

    Beiträge:
    15.045
    Zustimmungen:
    1.318
    MacUser seit:
    13.09.2004
    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.
     

Diese Seite empfehlen