Meerdere queries VS PHP loop

Status
Niet open voor verdere reacties.

Lapixx

Gebruiker
Lid geworden
2 mei 2008
Berichten
132
Hoi,

Ik heb een script waarbij een aantal gegevens uit een MySQL tabel worden opgehaald. Dit zijn onder andere gemiddelde waarden, en er wordt bijvoorbeeld berekend welk deel van de records een bepaalde waarde heeft in een bepaalde kolom, en een aantal queries bevatten GROUP BY waardoor je weer een apparte query nodig hebt.

Hoe dan ook, om dit te doen worden er 7 queries uitgevoerd bij het laden van de pagina. Vanuit deze queries kan ik vrijwel direct resultaten halen en weergeven.

Echter, het gaat zich steeds om dezelfde tabel, en ik zou dezelfde resultaten kunnen krijgen door éénmalig een SELECT * FROM tabel uit te voeren en vervolgens in PHP door de resultaten te loopen en op die manier mijn gegevens verzamelen.

Wat is het snelste/beste om te doen? Verschillende MySQL queries uitvoeren of resultaten mbv PHP filteren?

Alvast bedankt,
Lapixx
 
Als het om dezelfde tabel gaat kun je wellicht ook nog kijken of je 1 query kunt maken.

Gemiddeldes kun je ook via SQL berekenen.
 
Dat doe ik ook, ik heb zoveel mogelijk dingen in 1 query gezet, maar een aantal zaken (waarbij GROUP BY gebruikt wordt bijvoorbeeld) moeten nu eenmaal apart. Tenzij ik dus alles via PHP doe, en slechts 1 keer de volledige (althans, de kolommen die ik nodig heb) tabel opvraag.
 
Je kunt ook subqueries opbouwen.

De context waarin dit alles bestaat is nu moeilijk in te schatten omdat we verder niets weten.
Heb je een database-structuur die je hier kunt plaatsen? en de gewenste resultaten.

Wellicht ook de huidige manier van opvragen plaatsen
 
De belangrijkste zaken uit de tabel (waar informatie over bezoekers wordt opgeslagen) zijn bijvoorbeeld pageviews en de browser en platform.

Nu, het gemiddelde van pageviews en het gemiddelde van een aantal andere cijfers worden in 1 query opgevraagd. Wanneer ik een uitdraai wil geven over gebruikte webbrowsers en platforms gebruik ik SELECT browser, COUNT(browser) FROM visits GROUP BY browser ORDER BY COUNT(browser) DESC, waarmee ik dus de browsernaam en het aantal bezoeken met die browser in een tabel kan weergeven. Hetzelfde doe ik dan ook voor de platform kolom.

Daarnaast wil ik nog een percentage berekenen van records waarbij de waarde in kolom "new" gelijk is aan 1, ten opzichte van alle records, waardoor ik dus ook een query uitvoor met een "where new=1" eraan vast.

Lijkt me lastig om dit allemaal te combineren, en ik vraag me af of je daarmee efficiënter resultaten kan krijgen? Ik weet namelijk niet goed hoe MySQL databases doorzoekt.
 
Wanneer je steeds verschillende kolommen nodig hebt wordt het lastig in 1 query te krijgen.

Blijkbaar zit er maar 1 manier op, een benchmark maken.
Beide methodes uitproberen en de tijd dat het duurt bijhouden.
 
Tenzij dit een theoretisch voorbeeld is (ie; je wilt echt heel specifiek werken aan je performance) of dit is voor een proffesionele site (ie; je verwacht duizenden bezoekers per dag of honderd-duizenden rijen) zou ik er eerlijk gezegd niet eens over nadenken.

Als je het wel echt wil weten, geef dan even de database structuur, de code en hoeveel rijen en requests je verwacht, dan kunnen we even kijken ;) Dat kan een hoop verschil maken namelijk, in het bepalen wat sneller is.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan