Mam zapytanie na dużej tabeli, która wygląda następująco:
declare @myIdParam int = 1
select *
from myTable
where (@myIdParam is null or myTable.Id = @myIdParam)
Istnieje kilka podobnych warunków warunkowych w klauzuli where, a także wiele sprzężeń, ale jest to streszczenie.
W efekcie, jeśli @myIdParam ma wartość null, nie chcemy ograniczać wyników za pomocą tego parametru.
Nie jestem profesjonalistą DB, ale z moich testów wynika, że ta kontrola NULL jest wykonywana dla każdego rekordu i nie jest w żaden sposób zoptymalizowana.
Jeśli usunę sprawdzanie wartości NULL i założę, że parametr nie ma wartości NULL, zapytanie jest natychmiast zwracane. W przeciwnym razie zajmuje to do dziesięciu sekund.
Czy istnieje sposób na zoptymalizowanie tego, aby sprawdzanie było wykonywane tylko raz w czasie wykonywania?
OPTION(RECOMPILE)