Se si dispone di un'istruzione select con una funzione scalare utilizzata in vari calcoli, la funzione scalare ottiene chiamato più volte? Se lo fa, c'è un modo per ottimizzare questo in modo da chiamare solo la funzione una volta per selezionare, come nella mia vera query verrà chiamato migliaia di volte, X 6 volte per selezionare.Il richiamo di una funzione scalare in un'istruzione select più volte esegue la funzione più volte e come spostarsi in caso affermativo
Ad esempio:
SELECT
[dbo].[fn_Days](@Account) + u.[DayRate],
[dbo].[fn_Days](@Account)/u.[WorkDays]
FROM [dbo].[tblUnit] u
Tutti fn_days fa è restituire un int di giorni di lavoro.
destro mi rendo conto che funziona per ogni riga, ma dal momento che è stato eseguito 2 volte all'interno della stessa riga, in qualche modo potuto utilizzare lo stesso valore in modo non devo eseguire più volte per riga? – mameesh
Notato così come hai postato il tuo commento. Potrebbe, in teoria, memorizzare il valore, ma dubito che lo faccia. Un modo approssimativo per capirlo potrebbe essere quello di creare una funzione che impiega volutamente molto tempo per essere eseguita e quindi chiamarla una volta una query e due volte in una query e confrontare i tempi di esecuzione. – Corbin
Vedere che cos'è il piano di query se si unisce a un set che ha già il risultato della funzione come colonna. –