[PHP] performance verbeteren while loops

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Sneeuwvlok

Sneeuwvlok

28/06/2007 12:28:00
Quote Anchor link
Hai,

Ik ben bezig met een intranet waarop o.a. kmstanden berekend moeten worden. Nu heb ik 1 grote pagina waarin een arrays - van db queries - d.m.v. while loops doorlopen worden. Zie onderstaande voorbeeld.

Het probleem is nu dat de pagina enorm slecht performed. Ik heb al wat laadtijden per onderdeel verzameld en er zitten 2 stukken in die erg lang duren, resp. 7 en 22 seconden. Onderstaande stuk code duurt tussen de 6-7 om uit te voeren.

Ik heb een aantal indexen aangebracht, maar dat maakte niet veel verschil (maakt voor onderstaande code helemaal niets uit, omdat ik op basis van id's de tabel induik). Ik las ook ergens dat het nogal kan schelen als for i.p.v. while gebruikt, alleen met for ben ik niet zo bekend.

Maakt dit echt veel verschil en is het bijvoorbeeld mogelijk om m.b.v. een for loop een array )op basis van een selectie) te doorlopen?

Ik hoop dat jullie me wat tips kunnen geven over hoe ik onderstaande - en soortgelijke -code sneller kan maken.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

<?php
$query_ritten
         = "SELECT    rit_id, aantal_km
                                        FROM       ritten
                                        WHERE     auto_id = '$auto_id'
                                        AND            aantal_km is not null
                                        ORDER BY datum, ritnr ASC"
;
$result = mysql_query($query_ritten);                

while($kmstanden = mysql_fetch_array($result)){                    
    $eindstand = $beginstand + $kmstanden[aantal_km]; // de 1e keer is beginstand de in 1e instantie opgehaalde beginstand
    $query_update_kmstand         = "UPDATE ritten
                                                            SET         beginstand = '$beginstand',
                                                                         eindstand =  '$eindstand'
                                                            WHERE     rit_id = '$kmstanden[0]'
                                                            AND         auto_id = '$auto_id'"
;
    $result3         = mysql_query($query_update_kmstand);                    
    $beginstand = $eindstand; // de eindstand wordt de beginstand voor de volgende rit                        
}
?>
 
PHP hulp

PHP hulp

20/06/2024 20:29:09
 
Mr D

Mr D

28/06/2007 12:34:00
Quote Anchor link
mysql_fetch_assoc ipv mysql_fetch_array is iets sneller ook al zal je het verschil niet werken. Verder misschien PDO met prepared statements gebruiken, dit schijnt sneller te zijn
 
Gerben G

Gerben G

28/06/2007 12:37:00
Quote Anchor link
het laden van het script duurt zo lang omdat je waarschijnlijk veel query's uitvoerd (de update query in de while).
 
Sneeuwvlok

Sneeuwvlok

28/06/2007 12:39:00
Quote Anchor link
Donhertog schreef op 28.06.2007 12:37:
het laden van het script duurt zo lang omdat je waarschijnlijk veel query's uitvoerd (de update query in de while).


Ok.

Maar afgaande op bovenstaand voorbeeld; wat zou je er anders kunnen dan? Ik zal in dit geval toch op basis van de rit die nieuwe begin en eindstand moeten inserten, omdat deze waarden per rit berekend en bijgewerkt moeten worden.
Gewijzigd op 01/01/1970 01:00:00 door Sneeuwvlok
 
Mr D

Mr D

28/06/2007 12:39:00
Quote Anchor link
misschien ook even kijken of je database model wel optimaal is
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.