Joeův odkaz je dobrým výchozím bodem. Quassnoi to také pokrývá.
Obecně pokud jsou vaše pole správně indexována, NEBO pokud očekáváte odfiltrování více záznamů (tj. mají mnoho řádků EXIST
v dílčím dotazu) NOT EXISTS
bude fungovat lépe.
EXIST
a NOT EXISTS
oba zkrat – jakmile záznam splňuje kritéria, je buď zahrnut nebo odfiltrován a optimalizátor přejde na další záznam.
LEFT JOIN
se připojí ke VŠECHNYM ZÁZNAMŮM bez ohledu na to, zda se shodují či nikoli, pak odfiltrujte všechny neodpovídající záznamy. Pokud jsou vaše stoly velké a/nebo máte více JOIN
kritérií, může to být velmi náročné na zdroje.
Normálně se snažím použít NOT EXISTS
a EXIST
kde je to možné. Pro SQL Server, IN
a NOT IN
jsou sémanticky ekvivalentní a jejich psaní může být jednodušší. Toto jsou jedni z mála operátorů, které na SQL Serveru najdete a u kterých je zaručeno, že se zkratují.