Ich versuche, eine Abfrage zu optimieren, die so etwas wie dies funktioniert:SQLServer CASE-Ausdrücke - Kurzschlussauswertung?
SELECT
...
CASE WHEN (condition) THEN (expensive function call #1)
ELSE (expensive function call #2)
END
...
Der Abfrage-Plan zeigt, dass selbst für den Fall, dass 100% der Zeilen der WHEN-Klausel wird ein wesentlicher Teil der Zeit erfüllt in ausgegeben ruft das Ergebnis in der ELSE-Verzweigung auf. Die einzige Möglichkeit, die ich verstehen kann, besteht darin, davon auszugehen, dass SQLServer beide Ergebnisse auswertet, und dann nur eine basierend auf der Auswertung der WHEN-Bedingung auswählt, aber ich kann keine definitive Referenz finden, ob die Ergebnisse einer CASE-Anweisung werden vor den Bedingungen ausgewertet. Kann mir bitte jemand erklären oder auf eine Referenz verweisen?
Ich kann das überhaupt nicht bestätigen, selbst wenn ich eine teure Funktion versuche, die eine riesige Tabelle abfragt. Wenn ich den ersten Teil des CASE auf 100% true setze, dauert die Abfrage 5 Sekunden. Wenn nicht, ungefähr 10 Minuten. Welche Version von SQL Server? – MartW