Joes link er et godt udgangspunkt. Quassnoi dækker også dette.
Generelt hvis dine felter er korrekt indekseret, ELLER hvis du forventer at filtrere flere poster fra (dvs. har mange rækker EXIST
i underforespørgslen) NOT EXISTS
vil præstere bedre.
EXISTS
og NOT EXISTS
både kortslutning - så snart en rekord matcher kriterierne, er den enten inkluderet eller filtreret fra, og optimeringsværktøjet går videre til den næste rekord.
LEFT JOIN
vil slutte sig til ALLE RECORDS uanset om de matcher eller ej, så filtrer alle ikke-matchende poster fra. Hvis dine borde er store og/eller du har flere JOIN
kriterier, kan dette være meget meget ressourcekrævende.
Jeg prøver normalt at bruge NOT EXISTS
og EXISTS
hvor det er muligt. For SQL Server, IN
og NOT IN
er semantisk ækvivalente og kan være lettere at skrive. Disse er blandt de eneste operatører, du finder i SQL Server, som med garanti vil kortslutte.