sql >> Database teknologi >  >> RDS >> Sqlserver

SQL-ydeevne på LEFT OUTER JOIN vs. NOT EXISTS

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.



  1. C# opkald oracle lagret funktion

  2. SQLite dato og klokkeslæt funktioner

  3. Hvordan finder jeg ud af, hvilken transaktion der forårsager en Venter på tabel-metadatalåsetilstand?

  4. Ugyldig standardværdi for 'dateAdded'