Avatar billede card Nybegynder
01. september 2006 - 21:35 Der er 6 kommentarer og
1 løsning

Optimering af SQL Sætning

Select table1.field1, table2.field2
From table1 Left Join table2 ON table1.field1 = table2.field2 AND table2.field3 = '100' Inner Join table4 ON table1.field4 = table4.field5
WHERE
table1.field5 =  200 AND
table1.field4 =  300
group by table1.field1
order by table1.field4, table1.field6

Er der nogen som kan optimere ovenstående - den spiser virkelig CPU kraft med de tabelstørrelser jeg arbejder med.
Avatar billede erikjacobsen Ekspert
01. september 2006 - 21:38 #1
Rent logisk skal du flytte din table2.field3 = '100' ned i din WHERE - men det får det nu ikke til at går hurtigere.  Har du indexer på de felter du sammenligner på?
Avatar billede card Nybegynder
01. september 2006 - 21:50 #2
Hvis jeg flytter den ned, så mister min left join sin effekt... og jeg får kun de felter ud hvor kriteriet: table2.field3 = '100' er opfyldt...
Hvilke felter er det jeg skal jeg indexer på?
Avatar billede erikjacobsen Ekspert
01. september 2006 - 21:55 #3
Ok, det kan muligvis gøre en forskel. Du skal have indexer på alle eller en del af de felter hvor du laver en "="-sammenligning på. Det er ikke til at sige hvad og hvor uden at se og forstå hele din database-struktur.
Avatar billede card Nybegynder
01. september 2006 - 22:07 #4
Må jeg sende dig en screendump med oversigten?
Avatar billede erikjacobsen Ekspert
01. september 2006 - 22:14 #5
Nej tak, det kan jeg ikke overkomme i aften. Vent og se om der er andre, der bider på krogen. ;)
Avatar billede kjulius Novice
02. september 2006 - 02:16 #6
Siden du bruger en GROUP BY på felt1 går jeg ud fra, at du har en eller anden aggregat funktion på felt2 i din SELECT, selv om du ikke skriver det?

I øvrigt har erikjacobsen ret i, at indexer kan gøre en stor forskel på hastigheden af forespørgsler. Som hovedregel bør man som minimum have index på alle felter, som indgår i relationer mellem de forskellige tabeller - i hvert fald hvis tabellen har en vis størrelse. Hvis en tabel kun har 10 rækker, vil det ikke gøre nogen forskel, men hvis tabellen har 10.000 rækker, kan det gøre en stor forskel.
Du bliver nødt til at experimentere lidt...
Avatar billede card Nybegynder
30. januar 2011 - 14:37 #7
Oprettelser af indexer hjalp en hel del på hastigheden.
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



Seneste spørgsmål Seneste aktivitet
I går 23:37 Poe strøm Af lurup i LAN/WAN
I går 14:46 GIF-EDITOR Af snestrup2000 i Billedbehandling
I går 14:03 Logge ind Af Bob i PC
I går 12:12 2 skærme - 1 virker - den anden siger No signal Af eksmojo i Skærme
I går 10:33 openvpn projekt Af dcedata1977 i Windows