aan alle goede dingen komt een eind, webmasterplein.net 2003 - 2013
wij danken jullie voor al mooie momenten die dankzij dit forum ontstonden - Derk, Rutger en Stef

Help mijn query duurt wel 4 minuten!

Je komt er niet helemaal uit bij het scripten? Übergoede functie geschreven? Alles met betrekking tot scripting, kun je hier terecht.

Help mijn query duurt wel 4 minuten!

Berichtdoor Remi » 21 okt 2010 18:03

Hey,

Ik heb een query waarvan het uitvoeren wel 4 minuten duurt. Hoe kan ik er voor zorgen dat dit sneller gaat?
Het zit zo. Ik heb een tabel met producten, deze worden geupload naar een website. Als ze geupload zijn komen ze in de tabel done, als het niet lukt (door gebrek aan gegevens) komen ze in de tabel notdone.
De query die de producten ophaalt kijkt of de producten al niet in de tabel done of notdone staan. De producten die er niet instaan en dus nog moeten worden geupload stuurt hij terug.
Maar het probleem is dat die er 4 minuten over doet om de query uit te voeren. De CPU load zie je ook gelijk naar 100% schieten.
Dus hoe o hoe kan ik dit sneller laten gaan?
Dit is de query:
Code: Selecteer alles
SELECT k.code, k.naam, leverancier.prijs, leverancier.maat
FROM producten AS k, leverancier
WHERE leverancier.prijs > 0
  AND leverancier.naam = k.naam
  AND k.code NOT IN (SELECT code FROM done WHERE DONE = 1)
  AND k.code NOT IN (SELECT code FROM notdone WHERE NOTDONE = 1)
ORDER BY leverancier.prijs ASC
LIMIT 1,2
Avatar gebruiker
Remi
wmpr
 
Berichten: 3010
Geregistreerd: 04 apr 2006 15:22

Re: Help mijn query duurt wel 4 minuten!

Berichtdoor Derk » 21 okt 2010 21:57

Bij mij op school zeiden ze altijd dat zelf query's optimaliseren niet zo veel zin heeft aangezien de database het toch oplost zoals hij het het snelste kan.
Nu geloof ik daar eerlijk gezegd niet zo veel van, maar als het wel zo is, zul je moeten accepteren dat het 4 min. duurt.
Afbeelding
Avatar gebruiker
Derk
Beheerder
Beheerder
 
Berichten: 12634
Geregistreerd: 27 nov 2003 19:50
Woonplaats: Houten

Re: Help mijn query duurt wel 4 minuten!

Berichtdoor KillerSponge » 22 okt 2010 21:29

Dat kan zeker wel ;)

Maar ik moet zeggen dat deze structuur een heel stuk beter opgezet had kunnen worden. Je hebt nu twee tabellen die feitelijk hetzelfde zijn, wat de performance niet bepaald verbeterd. Als je zorgt dat het in één tabel zit, en vervolgens de zoekactie uitvoert op een geindexeerde key (liest een integer en geen varchar) zou het al een stuk sneller moeten gaan.

Er zijn nog wel meer manieren om queries te optimaliseren, maar daarvoor moet je erg veel verstand hebben van hoe de database intern alles afhandelt... Ik weet het iig niet :P
Blabla en andere onzin - http://killersponge.nl
Avatar gebruiker
KillerSponge
Beheerder
Beheerder
 
Berichten: 14456
Geregistreerd: 24 aug 2004 13:05

Re: Help mijn query duurt wel 4 minuten!

Berichtdoor Remi » 25 okt 2010 13:00

Ik heb nu producten en leverancier samengevoegd, aangezien die toch altijd gelijk is. Dit scheelt nu al vast 1,5 minuut. Dus dat is een hele vooruitgang.
@killer, het probleem is dat het niet mijn eigen database is en ik had te veel werk vind om de hele database opnieuw op te bouwen moet ik omslachtig query's gebruiken. Maar ik sta er gewoon van te kijken dat ding daarmee gewoon 4 minuten lang 100% staat te trekken en vroeg mij dus af of ik wat fout deed.
Maar goed, nog maar 1000 producten dan ben ik klaar. 3*1000 = 3000 minuten = 50 uur, ykes!

Remi
Avatar gebruiker
Remi
wmpr
 
Berichten: 3010
Geregistreerd: 04 apr 2006 15:22

Re: Help mijn query duurt wel 4 minuten!

Berichtdoor KillerSponge » 25 okt 2010 15:40

Ik heb bij het berekenen van website statistieken al wel queries gehad die een half uur tot drie kwartier duren, dat kan dus best ;)

Het maffe is alleen dat dit opzich een vrij simpele query is, die veel sneller dan dat zou moeten gaan... Zélfs als de database zo maf en onefficient is opgezet.
Blabla en andere onzin - http://killersponge.nl
Avatar gebruiker
KillerSponge
Beheerder
Beheerder
 
Berichten: 14456
Geregistreerd: 24 aug 2004 13:05


Keer terug naar PHP, ASP, SQL



cron