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

Używanie zmiennych w zapytaniu generuje inny plan zapytań

Ponieważ gdy używasz wartości FIXED z wyłączoną funkcją AUTO-PARAMETERIZATION, plan zapytania dokładnie wie, dla jakiej wartości jest potrzebne do uruchomienia zapytania. Tak więc plan jest dostrojony SPECYFICZNIE do tych wartości.

Jednak gdy używasz zmiennych, plan, który zostanie umieszczony w pamięci podręcznej zapytań, to ten, który zawiera sparametryzowane zmienne - które można zastąpić dowolną zmienną i ponownie użyje tego samego planu. Dlatego plany te będą musiały być bardziej solidne i ogólne, aby poradzić sobie z „najlepszym przeciętnym przypadkiem”.

W SQL Server 2008 możesz ustawić, czy proste parametry mają być automatycznie parametryzowane, aby uzyskać konsekwentnie „najlepszy średni przypadek” – ze wszystkimi jego dobrymi i złymi.

Nr ref.:

EDYTUJ — o wydajności

Jeśli chodzi o wydajność, optymalizator może się pomylić - w tym przypadku spojrzał na statystyki for the exact values i czuł, że indeks nie jest pomocny (może być problemem w punkcie krytycznym), więc zamiast tego plan dotyczy skanowania klastrowego. To sztuka, czy wymusić plan zapytania - ale oczywiście użycie indeksu jest o 50% szybsze w przypadku

  1. specyficzny sprzęt
  2. dystrybucja danych w określonym punkcie czasu
  3. podano określone wartości

O ile nie miałbym bardzo dobrego powodu, nie grałbym w Optymalizatora zapytań (np. za pomocą wskazówek dotyczących indeksu), chyba że mam dużo danych, aby udowodnić, że niezmiennie to przyspieszy.




  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 przyznać właścicielowi bazy danych (DBO) uprawnienie ZESPÓŁ DOSTĘPU ZEWNĘTRZNEGO?

  2. Jak tworzyć widoki zmaterializowane w SQL Server?

  3. Pobieranie wieloetapowej operacji generowało błędy. Sprawdź każdą wartość statusu. błąd podczas używania ADO z serwerem SQL 2008

  4. Wartości NULL są wykluczone. Czemu?

  5. Korzystanie z indeksów w tabelach SQL Server zoptymalizowanych pod kątem pamięci