Ho una query su un grande tavolo che assomiglia a questo:
declare @myIdParam int = 1
select *
from myTable
where (@myIdParam is null or myTable.Id = @myIdParam)
Esistono diversi condizionali simili come questo nella clausola where e ci sono anche molti join, ma questo è un riepilogo.
In effetti, se @myIdParam è null, non vogliamo limitare i risultati utilizzando questo parametro.
Non sono un professionista del DB, ma dai miei test sembra che questo controllo NULL venga eseguito per ogni record e non ottimizzato in alcun modo.
Se rimuovo il controllo null e presumo che il parametro non sia null, la query ritorna immediatamente. Altrimenti, ci vogliono fino a dieci secondi.
C'è un modo per ottimizzare ciò in modo che il controllo venga eseguito solo una volta in fase di esecuzione?
OPTION(RECOMPILE)