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

Dlaczego to (nieskorelowane) podzapytanie powoduje takie problemy?

Z mojego doświadczenia wynika, że ​​im bardziej złożone są Twoje zapytania, tym mniej sprawny jest optymalizator SQL w tworzeniu zręcznych planów. Tutaj masz 16 złączeń, niektóre lub większość to złączenia zewnętrzne, masz co najmniej jedno podzapytanie... wrzuć wystarczającą liczbę indeksów, liczności, widoków, zastosowania zewnętrzne i kto wie co jeszcze i nikt, nawet Microsoft inżynierowie*, mogą opracować procedury, które będą równomiernie i regularnie generować najbardziej optymalne plany.

To, co opisałeś, doświadczyłem wiele razy - zmień jedną prostą rzecz w niechlujnym zapytaniu, a wszystko będzie o rząd wielkości szybciej (lub zgrzyta zębami, wolniej). Nie mam metody na określenie, kiedy złożoność jest zbyt złożona, to bardziej uczucie niż cokolwiek innego. Moja ogólna praktyczna zasada brzmi:jeśli wygląda na zbyt długą lub zbyt skomplikowaną, uprość ją tam, gdzie możesz – na przykład wstępnie wybraną pojedynczą wartość zagnieżdżoną lub wydzielenie części zapytania, co zawsze działaj szybko z małym zestawem wyników, najpierw uruchamiając go i przechowując wyniki w tabeli tymczasowej.

( * Należy pamiętać, że jest to łagodny sarcsam)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy mogę uruchomić wszystkie raporty w danym folderze z serwera raportów?

  2. Jak dodać czas do DateTime w SQL?

  3. Próba przechowywania zawartości XML w SQL Server 2005 kończy się niepowodzeniem (problem z kodowaniem)

  4. Wyniki oddzielone przecinkami w SQL

  5. Wywołanie niezdefiniowanej funkcji sqlsrv_connect() — rozwiązywanie problemów