Zwykle wybieranie wynik funkcji skalarnej nie zaszkodzi, ale filtrowanie przez to może z łatwością kosztować setki sekund (choć niekoniecznie).
Jeśli potrzebujesz filtrować według wyniku funkcji skalarnej (WHERE col = dbo.scalar_function()
), często pomaga utworzenie wbudowanej funkcji z wartościami przechowywanymi w tabeli. Zwróci swoją wartość jako jedyny wiersz tabeli wynikowej. Następnie wykonałbyś inner join
z wynikiem funkcji, skutecznie filtrując według zwracanej wartości. Działa to, ponieważ SQL Server jest zawsze w stanie rozwinąć wbudowane funkcje z wartościami z tabeli i wstawić je do zapytania wywołującego.
Zauważ, że ta sztuczka nie zadziała, jeśli funkcja jest wieloetapowa. Nie można ich rozwinąć.