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

Dlaczego zapytanie parametryczne generuje znacznie wolniejszy plan zapytań w porównaniu z zapytaniem niesparametryzowanym?

Wydaje się, że planista zapytań podjął decyzję w dosłownym zapytaniu, która jest oparta na informacjach, które już posiada. Miałby statystyki, które może skutecznie przeszukiwać w oparciu o rozproszenie danych podanych w konkretnym literale.

Sparametryzowane zapytanie wybrało zapytanie, które jego zdaniem jest najbardziej sprawiedliwe dla wszystkich danych w tabeli, co, jak zauważysz, zawiera wiele zagnieżdżonych pętli (wydajność =zła).

Być może spróbujesz uruchomić narzędzia do optymalizacji bazy danych w swojej bazie danych, aby sprawdzić, czy niektóre indeksy mogą ci tu pomóc?

Szczególnie w zapytaniu wypróbuj to:

declare @p0 int
set @p0 = 1000
select *
from foo
join bar on bar.x = foo.x
join baz on baz.y = foo.y
where foo.x = @p0
OPTION ( OPTIMIZE FOR (@p0 = 1000))

Ale byłbym ostrożny, jeśli chodzi o robienie tego bez pewności, że dane zawarte w tym zapytaniu nie ulegną zmianie i że Twoje zapytanie w tym planie ZAWSZE będzie bardziej wydajne.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zainstaluj rozszerzenie agenta programu SQL Server w Azure Data Studio

  2. Jak zastosować posiadanie klauzuli z grupą przez w Select Query — samouczek SQL Server / TSQL, część 131

  3. Jak wybrać pierwszy dzień miesiąca w SQL?

  4. Przesunięcie wiersza w SQL Server

  5. Funkcja a procedura składowana w SQL Server