Sto cercando di ottimizzare una query che fa qualcosa di simile:SQLServer Espressioni CASE - valutazione del cortocircuito?
SELECT
...
CASE WHEN (condition) THEN (expensive function call #1)
ELSE (expensive function call #2)
END
...
Il piano di query mostra che per anche nei casi in cui il 100% di righe soddisfare la clausola WHEN, una parte sostanziale del tempo è trascorso in chiama al risultato nella sezione ELSE.
L'unico modo in cui posso dare un senso a questo è presumere che SQLServer valuti entrambi i risultati, quindi selezionarne solo uno basato sulla valutazione della condizione WHEN, ma non riesco a trovare alcun riferimento definitivo se i risultati di una dichiarazione CASE vengono valutati prima dei condizionali. Qualcuno può per favore chiarire o indicarmi un riferimento?
Non posso confermarlo affatto, anche quando provo una funzione costosa che richiede una tabella enorme. Se imposto che la prima parte di CASE sia vera al 100% se è il momento, la mia query impiega 5 secondi. In caso contrario, circa 10 minuti. Quale versione di SQL Server? – MartW