Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Вызов UDF сильно тормозит
|
|||
|---|---|---|---|
|
#18+
Добрый день. Есть простейшая функция для нахождения минимального значения из трех: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Возьмем тестовый скрипт: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. На нашем довольно шустром сервере он выполняется в среднем в район 50мс. Если же заменяем вызов функции на выражение прямо в строке, то время выполнения снижается до 2-3мс. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. То есть всё тоже самое, только без вызова функции. Подскажите, пожалуйста, как сделать её вызов более быстрым? В реальном запросе выражения более громоздкие, поэтому их пихать напрямую без функции неудобно. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2019, 20:02 |
|
||
|
Вызов UDF сильно тормозит
|
|||
|---|---|---|---|
|
#18+
Alexey30Подскажите, пожалуйста, как сделать её вызов более быстрым?Сделать функцию инлайновой Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. Ну или дождаться 2019-го сервера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2019, 20:11 |
|
||
|
Вызов UDF сильно тормозит
|
|||
|---|---|---|---|
|
#18+
Спасибо за ответ. Cross Apply в примере использовать удобно, а в реальном запросе особо не вариант. Неужели нет никакого более "красивого" метода? Microsoft SQL Server 2016 (SP2-GDR) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2019, 20:16 |
|
||
|
Вызов UDF сильно тормозит
|
|||
|---|---|---|---|
|
#18+
Установить сервер, в котором есть инлайновые скалярки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2019, 20:32 |
|
||
|
Вызов UDF сильно тормозит
|
|||
|---|---|---|---|
|
#18+
Гавриленко Сергей Алексеевич, печально. CLR можно не пробовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2019, 20:37 |
|
||
|
Вызов UDF сильно тормозит
|
|||
|---|---|---|---|
|
#18+
Alexey30, как раз подходящий случай для CLR функции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2019, 20:59 |
|
||
|
Вызов UDF сильно тормозит
|
|||
|---|---|---|---|
|
#18+
Alexey30Cross Apply в примере использовать удобно, а в реальном запросе особо не вариант.А почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2019, 21:17 |
|
||
|
Вызов UDF сильно тормозит
|
|||
|---|---|---|---|
|
#18+
invm, запрос читается сложнее, на мой взгляд. Странно запихивать во FROM то, что должно быть в SELECT. Однако действительно работает довольно шустро, изменил только тело функции на такое: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2019, 22:56 |
|
||
|
Вызов UDF сильно тормозит
|
|||
|---|---|---|---|
|
#18+
Alexey30, При этом производительность чуть-чуть хуже, чем в первоначальном варианте функции, но там отсутствовали проверки на NULL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2019, 22:58 |
|
||
|
Вызов UDF сильно тормозит
|
|||
|---|---|---|---|
|
#18+
Alexey30, разница принципиальная. В первом случае сервер будет вычислять выражение для каждого значения атрибута, а во втором выполнит "подзапрос", который сможет встроить в план запроса так, как если бы обращение происходило к таблице. Соответственно, первый вариант не сможет использовать параллельный план выполнения, как минимум. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2019, 23:20 |
|
||
|
Вызов UDF сильно тормозит
|
|||
|---|---|---|---|
|
#18+
Alexey30..Cross Apply в примере использовать удобно, а в реальном запросе особо не вариант. Неужели нет никакого более "красивого" метода?..насколько помню cross apply будет для каждой строки, одна за одной, по очереди, впрочем как и функция на строку т.е. по любому последовательное выполнение без паралельности единственная паралельность как указали выше - в пределах одной строки по значениям под-таблицы, т.е. как-бы лучше - но и не сильно для полной паралельности - можно попробовать табличную CLR, и там уже внутри выстраивать многопоточный алгоритм ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2019, 00:47 |
|
||
|
Вызов UDF сильно тормозит
|
|||
|---|---|---|---|
|
#18+
Alexey30Спасибо за ответ. Cross Apply в примере использовать удобно, а в реальном запросе особо не вариант. Неужели нет никакого более "красивого" метода? Microsoft SQL Server 2016 (SP2-GDR) Функции - зло ;-) Сделайте запрос с раскрученным запросом в процедуре ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2019, 09:53 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39844358&tid=1687464]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
130ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 225ms |
| total: | 442ms |

| 0 / 0 |
