Avatar billede di8leva Nybegynder
22. april 2004 - 15:31 Der er 6 kommentarer og
1 løsning

Performance i en database. JOIN vs IN

Vilken SQL-sætning gir bæst performance i teorin.

* select id from table where id2 in (select id from table2 where field = 5)

* select table.id from table left join table2 on table.id2 = table2.id where table2.field = 5
Avatar billede di8leva Nybegynder
22. april 2004 - 15:33 #1
* select table.id from table inner join table2 on table.id2 = table2.id where table2.field = 5
Avatar billede venne Nybegynder
22. april 2004 - 15:37 #2
Prøv selv at undersøge execution plan i Query Analyzer.
Det skulle ikke undre mig om de to forespørgsler giver præcis samme plan.
Avatar billede arne_v Ekspert
22. april 2004 - 15:38 #3
Generlt vil jeg forvente nogenlunde ens performance.

Du kan lave en test på den/de database, som du bruger. Bliv ikke forbavset over at
se forskellige resultater for forskellige databaser.
Avatar billede trer Nybegynder
22. april 2004 - 16:05 #4
arne har ganske ret, resultatet variere mellem de forskellige databaseplatforme,
i SQL Server 6.5 var en IN mere effektiv end en JOIN - men i senere versioner er det omvendt.
Avatar billede di8leva Nybegynder
23. april 2004 - 09:13 #5
damn... då er jag nødt til at køre en masse test...
Avatar billede arne_v Ekspert
23. april 2004 - 18:36 #6
Sådan er det næsten altid med database performance.
Avatar billede trer Nybegynder
23. april 2004 - 18:56 #7
Faktisk så er forskellen i effektivitet minimal - specielt hvis du sørger for, at have indekseret de kolonner som du joiner over eller har som where-betingelse.

Mht test - du skal lige huske, at du ikke blot kan køre 1000 queries og så regne med det som resultat. Du skal i stedet kigge på cost, fysisk i/o og eksekveringsplaner for queriene for at se den reelle forskel - ellers risikerer du at blive snydt af cache, readahead o.l. indbyggede optimeringsting. I effektivitetsmåling kan du nemlig ikke blot gå ud fra tidsforbruget - du skal i stedet kigge på den totale belastning querien giver, ellers passer din vurdering ikke hvis der kører mange samtidige queries.

Værktøjet til det er med i SQL Server (en funktion i Query Analyzer der tillader at du sammenligner effektiviteten af 2 eller flere queries - Show Estimated Execution Plan) og jeg mener at der nu er noget tilsvarende i Oracle 9i's klient omend det sidst jeg kiggede ikke kunne lave en sammenligning af planerne.
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