Почему простой T-SQL функция UDF делает выполнение кода в 3 раза медленнее

В дополнение к другим хорошим аргументам выше, необходимо заметить ArrayList реализации RandomAccess интерфейс, в то время как LinkedList реализации Queue.

Так, так или иначе они решают немного отличающиеся проблемы с различием эффективности и поведения (см. их список методов).

7
задан GEOCHET 25 October 2013 в 16:56
поделиться

3 ответа

У вас есть скалярная UDF (принимает от 0 до n параметров и возвращает скалярное значение). Такие UDF обычно вызывают построчную операцию вашего запроса, если она не вызывается с постоянными параметрами, с точно таким же снижением производительности, которое вы испытываете с вашим запросом.

См. здесь , здесь и здесь для подробного объяснения ошибок производительности при использовании UDF.

14
ответ дан 6 December 2019 в 05:49
поделиться

В зависимости от контекста использования оптимизатор запросов может анализировать встроенный код и вычислять отличный план запроса с использованием индекса, в то время как он не «встраивает функцию» для аналогичного подробный анализ и, таким образом, заканчивается неполноценным планом запроса, когда задействована функция. Посмотрите на два плана запроса рядом, и вы сможете довольно легко подтвердить (или опровергнуть) эту гипотезу!

5
ответ дан 6 December 2019 в 05:49
поделиться

Не используйте медленную скалярную UDF, используйте быструю встроенную. Примеры здесь:

Повторно используйте свой код с табличными UDF

Вычисление третьей среды месяца с помощью встроенных UDF

Многие вложенные встроенные UDF работают очень быстро

Вопрос очень распространен: он был задан и отвечал сотни раз прежде, поэтому у него есть несколько шаблонных ответов.

13
ответ дан 6 December 2019 в 05:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: