Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Conditional usage of inline SQL functions
|
|||
|---|---|---|---|
|
#18+
Всем привет. Ситуация. Есть некая inline table-valued function, которая входит в запрос в хранимую процедуру. Функция использует xml преобразование, и ее использование, судя по execution plan, ощутимо влияет на общий performance. Но при этом ее использование имеет смысл только при определеных значенях параметра хранимой процедуры. Но, даже если я в явном виде прописываю вызов этой функции с дополнительным условием, она, судя по execution plan, все равно выполняется, независимо от этого условия. В упрощенном виде этот факт выглядит так - см скрин в атачменте. То есть WHERE условие накладываетя уже как бы после выполнения функции. Причем если поставить условие WHERE 1=0 - тогда заход в функцию не происходит. Есть способы обойти такое поведение, кроме Dynamic SQL? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2019, 10:53 |
|
||
|
Conditional usage of inline SQL functions
|
|||
|---|---|---|---|
|
#18+
Условие 0=1 заведомо даёт один и тот же результат всегда, а значение переменной @Find_What заранее неизвестно и она равна некоторому значению по умолчанию в момент компиляции (если ничего не делать, то NULL). Видимо, именно для этого значения оптимизатор и подбирает оптимальный план. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2019, 11:00 |
|
||
|
Conditional usage of inline SQL functions
|
|||
|---|---|---|---|
|
#18+
iap, Это все понятно, но в run-time он в эту функцию реально заходит, и только после этого оценивает условие. Можно этот порядок как то поменять? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2019, 11:05 |
|
||
|
Conditional usage of inline SQL functions
|
|||
|---|---|---|---|
|
#18+
McCar, IF @var IS NOT NULL SELECT .. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2019, 11:05 |
|
||
|
Conditional usage of inline SQL functions
|
|||
|---|---|---|---|
|
#18+
McCar, используйте опцию Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2019, 11:06 |
|
||
|
Conditional usage of inline SQL functions
|
|||
|---|---|---|---|
|
#18+
McCarЭто все понятно, но в run-time он в эту функцию реально заходит, и только после этого оценивает условие.Вы этот вывод сделали из формы плана? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2019, 11:14 |
|
||
|
Conditional usage of inline SQL functions
|
|||
|---|---|---|---|
|
#18+
invmMcCarЭто все понятно, но в run-time он в эту функцию реально заходит, и только после этого оценивает условие.Вы этот вывод сделали из формы плана? Похоже вывод был неправильный. Реальное значение "Number of Executions" там ноль. Заказчик тут панику поднял что 100% стоимости запроса занимает вызов этой функции. Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2019, 11:37 |
|
||
|
Conditional usage of inline SQL functions
|
|||
|---|---|---|---|
|
#18+
felix_ffMcCar, используйте опцию Код: sql 1. Спасибо, работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2019, 12:14 |
|
||
|
Conditional usage of inline SQL functions
|
|||
|---|---|---|---|
|
#18+
McCar, у вас parameter sniffing... из решений 1 - option(recompile) select Str_Out from ... where @find_what is not null option(recompile) 2. значений тут 2 можно и простым условием сделать... if @find_what is not null select Str_Out from ... where @find_what is not null else select Str_Out from ... --where @find_what is not null ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2019, 18:00 |
|
||
|
Conditional usage of inline SQL functions
|
|||
|---|---|---|---|
|
#18+
-- KAB --у вас parameter sniffing...Нет там такого. Посмотрите внимательнее на предикат в where. С этим запросом вообще озвученной проблемы нет, потому что в одном из фильтров на внешнем входе первого NL срабатывает Startup Expression Predicate по @Find_What is not null. Что ТС и подтвердил - 21884204 . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2019, 20:39 |
|
||
|
|

start [/forum/topic.php?fid=46&tid=1687836]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
92ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
| others: | 271ms |
| total: | 483ms |

| 0 / 0 |
