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

Изпълнява ли се EXCEPT по-бързо от JOIN, когато колоните на таблицата са еднакви

Няма начин някой да ви каже това EXCEPT винаги или никога ще превъзхожда еквивалентен OUTER JOIN . Оптимизаторът ще избере подходящ план за изпълнение, независимо от това как пишете намерението си.

Въпреки това, ето моята насока:

Използвайте EXCEPT когато поне един от следното е вярно:

  1. Заявката е по-четлива (това почти винаги е вярно).
  2. Ефективността е подобрена.

И ДВЕТЕ от следните са верни:

  1. Заявката дава семантично идентични резултати и можете да демонстрирате това чрез достатъчно регресионно тестване, включително всички крайни случаи.
  2. Ефективността не се влошава (отново във всички крайни случаи, както и промени в околната среда, като изчистване на буферния пул, актуализиране на статистиката, изчистване на кеша на плана и рестартиране на услугата).

Важно е да се отбележи, че може да бъде предизвикателство да се напише еквивалентен EXCEPT заявка като JOIN става по-сложен и/или разчитате на дубликати в част от колоните, но не и на други. Написване на NOT EXISTS еквивалентен, но малко по-малко четим от EXCEPT трябва да бъде много по-тривиално за изпълнение - и често води до по-добър план (но имайте предвид, че никога не бих казал ALWAYS или NEVER , освен по начина, по който току-що го направих).

В тази публикация в блога демонстрирам поне един случай, когато EXCEPT се превъзхожда както от правилно изграденото LEFT OUTER JOIN и разбира се чрез еквивалентен NOT EXISTS вариация.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server 2016:View Designer

  2. Как да върна няколко стойности в една колона (T-SQL)?

  3. Какво е съхранена процедура?

  4. Как да разположите приложение с база данни на sql сървър на клиенти

  5. Създаване на планове за поддръжка в SQL Server