De link van Joe is een goed startpunt. Quassnoi dekt dit ook.
Over het algemeen als uw velden correct zijn geïndexeerd, OF als u verwacht meer records uit te filteren (d.w.z. veel rijen hebben EXIST
in de subquery) NOT EXISTS
zal beter presteren.
EXISTS
en NOT EXISTS
beide kortsluiting - zodra een record aan de criteria voldoet, wordt het opgenomen of eruit gefilterd en gaat de optimizer door naar het volgende record.
LEFT JOIN
zal lid worden van ALL RECORDS ongeacht of ze overeenkomen of niet, filter vervolgens alle niet-overeenkomende records. Als je tafels groot zijn en/of je hebt meerdere JOIN
criteria, kan dit zeer arbeidsintensief zijn.
Ik probeer normaal gesproken NOT EXISTS
. te gebruiken en EXISTS
waar mogelijk. Voor SQL Server, IN
en NOT IN
zijn semantisch equivalent en kunnen gemakkelijker te schrijven zijn. Dit zijn enkele van de enige operators die u in SQL Server aantreft die gegarandeerd kortsluiting veroorzaken.