Vilken av dessa SQLer är snabbast? En ranking hade varit schysst! :D
Spelar i.o.f.s. ingen roll i det jag gör just nu, men kan vara trevligt att veta i framtiden. :)
1.
SELECT * FROM tblOgrish
WHERE OgrishFooId IN (SELECT FooId FROM tblFoo WHERE FooFrobId = 123)
2.
SELECT * FROM tblOgrish
WHERE EXISTS (SELECT FooId FROM tblFoo WHERE FooFrobId = 123 AND OgrishFooId = FooId)
3.
SELECT * FROM tblOgrish
WHERE (SELECT COUNT(FooId) FROM tblFoo WHERE FooFrobId = 123 AND OgrishFooId = FooId) > 0
4.
SELECT o.* FROM tblOgrish o
INNER JOIN tblFoo f ON f.FooFrobId = 123 AND f.FooOgrishId = o.OgrishId
LarsGMedlem sedan dec. 200012 464 inlägg Därom kan man inget säga. Det beror på hur optimeringen fungerar i den DBMS du använder. I och med att de returnerar samma resultat så är det inget som hindrar att man har exakt samma exekveringsplan för alla frågorna.
Jag skulle nog anända exists då den är enklast att optimera.
(Förmodligen är den sista långsammast, då de flesta DBMS nog kommer att räkna ut COUNT. Om FooFrobId och FooId utgör hela primärnyckeln i tblFoo så borde det inte ha någon praktisk roll.)
Du kan inte jämföra 4:an med de andra, då det inte är säkert att de ger samma resultat.
Engine^Medlem sedan dec. 20003 887 inlägg Av det jag kommer ihåg av vad jag läst på MSDN, så ska det vara snabbare att använda sig av EXISTS - enligt någon av deras kolumnister dom har. Jag kommer inte ihåg namnet, men jag vet att jag hittade artikeln efter en massa sökning på "optimizing queries". Om det nu är så kan jag inte svara på och som vanligt verkar LarsG vara rätt säker på sin sak.
Erik Juhlin skrev:
En ranking hade varit schysst!
En snäll liten loop som är kompis med en timer brukar ge svar på sånt :)
Jag har också fått för mig att det bör gå snabbast med EXISTS.