Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Wydajność SQL w LEFT OUTER JOIN vs NOT EXISTS

Link Joe jest dobrym punktem wyjścia. Quassnoi również to obejmuje.

Ogólnie czy twoje pola są poprawnie zindeksowane LUB jeśli spodziewasz się odfiltrować więcej rekordów (tj. masz dużo wierszy EXIST w podzapytaniu) NOT EXISTS będzie działać lepiej.

EXIST i NOT EXISTS oba zwarcie - gdy tylko rekord spełnia kryteria, jest uwzględniany lub odfiltrowywany, a optymalizator przechodzi do następnego rekordu.

LEFT JOIN dołączy do WSZYSTKICH REKORDÓW niezależnie od tego, czy pasują, czy nie, a następnie odfiltruj wszystkie niepasujące rekordy. Jeśli Twoje tabele są duże i/lub masz wiele JOIN kryteria, może to być bardzo zasobożerne.

Zwykle próbuję użyć NOT EXISTS i EXIST tam, gdzie to możliwe. W przypadku serwera SQL IN i NOT IN są semantycznie równoważne i mogą być łatwiejsze do napisania. Są to jedne z jedynych operatorów, jakie można znaleźć w SQL Server, które gwarantują zwarcie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. OPENJSON „Nieprawidłowa składnia w pobliżu słowa kluczowego „z”.”. w SQL Server (ROZWIĄZANE)

  2. Jak utworzyć unikalny indeks na kolumnie NULL?

  3. JSON_MODIFY() Przykłady w SQL Server (T-SQL)

  4. Zwróć uprawnienia kolumny z serwera połączonego w programie SQL Server (przykłady T-SQL)

  5. Jak zaktualizować z SELECT w SQL Server