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

Czy Z WYJĄTKIEM wykonuje się szybciej niż JOIN, gdy kolumny tabeli są takie same?

Nikt nie może ci powiedzieć, że EXCEPT zawsze lub nigdy nie przewyższy równoważnego OUTER JOIN . Optymalizator wybierze odpowiedni plan wykonania niezależnie od tego, jak napiszesz swoją intencję.

To powiedziawszy, oto moja wskazówka:

Użyj EXCEPT kiedy co najmniej jeden z poniższych jest prawdziwe:

  1. Zapytanie jest bardziej czytelne (prawie zawsze będzie to prawda).
  2. Poprawa wydajności.

I OBU z poniższych są prawdziwe:

  1. Zapytanie daje semantycznie identyczne wyniki i możesz to zademonstrować za pomocą wystarczających testów regresji, w tym wszystkich przypadków brzegowych.
  2. Wydajność nie jest obniżona (ponownie, we wszystkich przypadkach brzegowych, a także w przypadku zmian środowiskowych, takich jak czyszczenie puli buforów, aktualizowanie statystyk, czyszczenie pamięci podręcznej planu i ponowne uruchamianie usługi).

Należy pamiętać, że napisanie odpowiednika EXCEPT . może być wyzwaniem zapytanie jako JOIN staje się bardziej złożony i/lub polegasz na duplikatach w części kolumn, ale nie w innych. Pisanie NOT EXISTS równoważny, choć nieco mniej czytelny niż EXCEPT powinno być o wiele bardziej trywialne do wykonania - i często prowadzi do lepszego planu (ale zauważ, że nigdy nie powiedziałbym ALWAYS lub NEVER , z wyjątkiem tego, co właśnie zrobiłem).

W tym poście na blogu pokazuję co najmniej jeden przypadek, w którym EXCEPT jest lepszy od prawidłowo skonstruowanego LEFT OUTER JOIN i oczywiście przez odpowiednik NOT EXISTS odmiana.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zautomatyzować zadanie generowania skryptów w programie SQL Server Management Studio 2008?

  2. Nie można usunąć schematu , ponieważ nie istnieje lub nie masz uprawnień. - SQL Server / samouczek TSQL, część 29

  3. Jakie są najlepsze praktyki dotyczące używania identyfikatora GUID jako klucza podstawowego, szczególnie w odniesieniu do wydajności?

  4. Oblicz sumę bieżącą w SQL Server

  5. Konstruuj datę z numeru roku i tygodnia w MSSQL