Avatar billede lsskaarup Nybegynder
21. februar 2005 - 08:12 Der er 12 kommentarer og
1 løsning

Optimering af query

Jeg har en stump kode, som jeg skal have optimeret, men da jeg ikke selv er den helt store SQL-haj, så tænkte jeg, at der sikkert skulle være nogle herude som kunne hjælpe mig.

Selve query ser sådanne:

SELECT month(r4) as maaned, count(*) as antal, sum(r504) as ordresum, sum(r477a) as staalpris, sum(r477) as tonnage, avg(r509) as krkg, sum(r503) as fortjeneste, avg(r502) as db, 'test' as budget, 'test' as budgetafv FROM (SELECT ordre, MAX(rev) as rev FROM ordre GROUP BY ordre) as o, ordre, ordre0, ordre4, ordre5 LEFT JOIN kunde ON kunde_hidden = kunde.id WHERE o.ordre = ordre.ordre && o.rev = ordre.rev && ordre.id = ordre0.tilbudsnummer && ordre0.tilbudsnummer = ordre4.tilbudsnummer && ordre4.tilbudsnummer = ordre5.tilbudsnummer && r4 >= '$startdato' && r4 < '$slutdato' $where GROUP BY maaned ORDER BY maaned

og den tager alt for lang tid at eksekvere, hvordan kan den optimeres mest muligt?
Avatar billede arne_v Ekspert
21. februar 2005 - 08:16 #1
MySQL eller SQLServer ?

Jeg tror ikke at det er SELECT statementen der skal ændres. Det vigtigste må
være at få sat index på de rigtige felter. Som hovedregel bør du have
index på alle de felter som er på den ene eller anden side af et lighedstegn
medmindre de er primær nøgler (primær nøgler har automatisk et index).
Avatar billede lsskaarup Nybegynder
21. februar 2005 - 08:24 #2
Det er til MySQL. Jeg ved ikke lige om der er index på alle felterne, men vil da tjekke.
Avatar billede lsskaarup Nybegynder
21. februar 2005 - 08:55 #3
Så har jeg sat index på alle felter som ikke har det naturligt, men da jeg lige pt. arbejder på noget andet, kan jeg ikke lige nu tjekke om det virker hastighedsforberende.
Avatar billede lsskaarup Nybegynder
21. februar 2005 - 09:43 #4
Øh, når databasen indeholder data, kommer index så til at virke med det samme på alle felterne eller er det først fra de "nye" eller "opdaterede" data, som vil få glæde af indexet?
Avatar billede arne_v Ekspert
21. februar 2005 - 09:52 #5
Jeg mener at det gælder med det samme.
Avatar billede lsskaarup Nybegynder
21. februar 2005 - 09:53 #6
Okay, det fandt jeg selv ud af, det virker med det samme. Ligger du et svar Arne_v?
Avatar billede arne_v Ekspert
21. februar 2005 - 09:54 #7
svar
Avatar billede arne_v Ekspert
21. februar 2005 - 09:55 #8
Hjalp det på performance ?
Avatar billede lsskaarup Nybegynder
21. februar 2005 - 10:03 #9
Ja, helt vildt faktisk. Før løb jeg panden imod en mur, da tidsgrænsen udløb og den var endda hævet til 120 sek. Nu går det tilgengæld meget hurtigt.
Avatar billede lsskaarup Nybegynder
23. februar 2005 - 08:06 #10
Øhhh, jeg er ked af at komme igen, men nu har det faktisk ikke hjulpet så meget. Arne tror du at query kan optimeres, eventuelt laves i små hug, selvom det godt nok i lige imod min indstilling?
Avatar billede lsskaarup Nybegynder
23. februar 2005 - 08:10 #11
Men jeg tror faktisk det er en anden query som er hård ved systemet:

SELECT count(*) as antal, sum(r504) as `sum` FROM (SELECT tilbud, MAX(rev) as rev FROM tilbud GROUP BY tilbud) as t, tilbud, tilbud0, tilbud5 LEFT JOIN kunde ON kunde_hidden = kunde.id WHERE t.tilbud = tilbud.tilbud && t.rev = tilbud.rev && tilbud.id = tilbud0.tilbudsnummer && tilbud0.tilbudsnummer = tilbud5.tilbudsnummer && r4 >= '$startdato' && r4 < '$slutdato' $where
Avatar billede arne_v Ekspert
26. februar 2005 - 18:12 #12
Har den index på de rigtige felter ?
Avatar billede lsskaarup Nybegynder
27. februar 2005 - 12:31 #13
Ja, det skulle jeg mene
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester