Joes länk är en bra utgångspunkt. Quassnoi täcker detta också.
I allmänhet om dina fält är korrekt indexerade, ELLER om du förväntar dig att filtrera bort fler poster (dvs. har många rader EXIST
i underfrågan) NOT EXISTS
kommer att prestera bättre.
EXIST
och NOT EXISTS
både kortslutning - så snart en post matchar kriterierna inkluderas den eller filtreras den bort och optimeraren går vidare till nästa post.
LEFT JOIN
kommer att gå med i ALLA REKORD oavsett om de matchar eller inte, filtrera sedan bort alla icke-matchande poster. Om dina bord är stora och/eller du har flera JOIN
kriterier kan detta vara mycket mycket resurskrävande.
Jag försöker normalt använda NOT EXISTS
och EXIST
där det är möjligt. För SQL Server, IN
och NOT IN
är semantiskt likvärdiga och kan vara lättare att skriva. Dessa är bland de enda operatörerna du hittar i SQL Server som garanterat kortsluter.