Czy jest jakaś różnica pod względem wydajności, gdy wiele zapytań jest uruchamianych z (różnymi) stałymi wartościami w klauzuli where, w przeciwieństwie do zapytania z zadeklarowanymi parametrami u góry, gdzie zamiast tego zmienia się wartość parametru?SQL - jakakolwiek różnica w wydajności przy użyciu wartości stałych vs parametrów?
zapytania z próbki ze stałą wartością w którym klauzula:
select
*
from [table]
where [guid_field] = '00000000-0000-0000-000000000000' --value changes
Proponowany (lepsza?) Kwerenda z deklarowanymi parametrami:
declare @var uniqueidentifier = '00000000-0000-0000-000000000000' --value changes
select
*
from [table]
where [guid_field] = @var
Czy jest jakaś różnica? Patrzę na plany wykonania czegoś podobnego do dwóch powyższych zapytań i nie widzę żadnej różnicy. Jednak wydaje mi się pamiętać, że jeśli użyjesz wartości stałych w instrukcjach SQL, to SQL Server nie użyje ponownie tych samych planów wykonywania zapytań, czy coś takiego, które spowoduje gorszą wydajność - ale czy to prawda?
Zasady sporządzania i stashing zapytań SQL Server są dość skomplikowane. Ogólnie rzecz biorąc, myślę, że kompiluje zapytanie oparte na pierwszych przekazanych parametrach. Tak więc, jeśli plan zapytania jest buforowany i zmieniasz parametry, wtedy kolejne użycie planu może nie być optymalne dla nowych wartości. Jednak powinno być w porządku dla pierwszego wywołania, które generuje plan zapytania. Uwaga: począwszy od pustej tabeli, a następnie wypełnienie tabeli może również wpłynąć na najlepszy plan, nawet przy przekazywaniu tej samej wartości. –