01. september 2006 - 21:35Der 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.
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å?
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å?
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.
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...
Oprettelser af indexer hjalp en hel del på hastigheden.
Synes godt om
Ny brugerNybegynder
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.