Ich habe eine Abfrage für eine große Tabelle, die so aussieht:
declare @myIdParam int = 1
select *
from myTable
where (@myIdParam is null or myTable.Id = @myIdParam)
In der where-Klausel gibt es mehrere ähnliche Bedingungen wie diese, und es gibt auch viele Verknüpfungen, aber dies ist eine Zusammenfassung.
Wenn @myIdParam null ist, möchten wir die Ergebnisse mit diesem Parameter nicht einschränken.
Ich bin kein DB-Profi, aber aus meinen Tests geht hervor, dass diese NULL-Prüfung für jeden Datensatz durchgeführt und in keiner Weise optimiert wird.
Wenn ich die Nullprüfung entferne und davon ausgehe, dass der Parameter nicht null ist, wird die Abfrage sofort zurückgegeben. Andernfalls dauert es bis zu zehn Sekunden.
Gibt es eine Möglichkeit, dies zu optimieren, sodass die Überprüfung zur Laufzeit nur einmal durchgeführt wird?
OPTION(RECOMPILE)