Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL производителност при LEFT OUTER JOIN срещу NOT EXISTS

Връзката на Джо е добра отправна точка. Quassnoi покрива и това.

Като цяло, ако полетата ви са правилно индексирани, ИЛИ ако очаквате да филтрирате повече записи (т.е. да имат много редове EXIST в подзаявката) NOT EXISTS ще се представи по-добре.

EXIST и NOT EXISTS и двете са на късо съединение – веднага щом запис отговаря на критериите, той или се включва, или се филтрира и оптимизаторът преминава към следващия запис.

LEFT JOIN ще се присъедини към ВСИЧКИ ЗАПИСИ независимо дали съвпадат или не, след това филтрирайте всички несъответстващи записи. Ако вашите таблици са големи и/или имате няколко JOIN критерии, това може да бъде много много ресурсоемко.

Обикновено се опитвам да използвам NOT EXISTS и EXIST където е възможно. За SQL Server, IN и NOT IN са семантично еквивалентни и може да са по-лесни за писане. Това са сред единствените оператори, които ще намерите в SQL Server, за които гарантирано късо съединение.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Разлика между подзаявка и корелирана подзаявка

  2. Как да избягвате низове в SQL Server с помощта на PHP?

  3. получавате разделен със запетая низ от редове

  4. Използвайте FILE_NAME(), за да върнете логическото име на файл за даден идентификатор на файл в SQL Server

  5. Какъв тип данни трябва да се използва за съхраняване на телефонни номера в SQL Server 2005?