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

LEFT JOIN Znacznie szybciej niż INNER JOIN

Łączenie Left wydaje się być szybsze, ponieważ SQL jest zmuszony najpierw wykonać mniejszy wybór, a następnie połączyć się z tym mniejszym zestawem rekordów. Z jakiegoś powodu optymalizator nie chce robić tego naturalnie.

3 sposoby na wymuszenie łączenia w odpowiedniej kolejności:

  1. Wybierz pierwszy podzbiór danych do tabeli tymczasowej (lub zmiennej tabeli), a następnie dołącz do niego
  2. Użyj złączeń lewych (i pamiętaj, że może to zwrócić inne dane, ponieważ jest to złączenie lewe, a nie wewnętrzne)
  3. użyj słowa kluczowego FORCE ORDER. Pamiętaj, że jeśli zmienią się rozmiary tabel lub schematy, plan zapytania może nie być poprawny (patrz https://dba.stackexchange.com/questions/45388/forcing-join-order )


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zmiana tabeli i dodanie UNIKALNEGO klucza powoduje błąd

  2. Czy można zwrócić pusty wiersz z SQL Server?

  3. Jak uzyskać listę dat rozpoczęcia tygodnia (poniedziałek) i daty zakończenia (niedziela) między dwiema datami?

  4. Rozmiar tabeli i indeksu w SQL Server

  5. Dwa zapytania w jednej tabeli wyników?