powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Conditional usage of inline SQL functions
10 сообщений из 10, страница 1 из 1
Conditional usage of inline SQL functions
    #39812850
McCar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.
Ситуация.
Есть некая inline table-valued function, которая входит в запрос в хранимую процедуру.
Функция использует xml преобразование, и ее использование, судя по execution plan, ощутимо влияет на общий performance.
Но при этом ее использование имеет смысл только при определеных значенях параметра хранимой процедуры.
Но, даже если я в явном виде прописываю вызов этой функции с дополнительным условием, она, судя по execution plan, все равно выполняется, независимо от этого условия.
В упрощенном виде этот факт выглядит так - см скрин в атачменте.
То есть WHERE условие накладываетя уже как бы после выполнения функции.
Причем если поставить условие WHERE 1=0 - тогда заход в функцию не происходит.
Есть способы обойти такое поведение, кроме Dynamic SQL?
Спасибо.
...
Рейтинг: 0 / 0
Conditional usage of inline SQL functions
    #39812858
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Условие 0=1 заведомо даёт один и тот же результат всегда,
а значение переменной @Find_What заранее неизвестно и
она равна некоторому значению по умолчанию в момент компиляции (если ничего не делать, то NULL).
Видимо, именно для этого значения оптимизатор и подбирает оптимальный план.
...
Рейтинг: 0 / 0
Conditional usage of inline SQL functions
    #39812865
McCar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iap,
Это все понятно, но в run-time он в эту функцию реально заходит, и только после этого оценивает условие.
Можно этот порядок как то поменять?
...
Рейтинг: 0 / 0
Conditional usage of inline SQL functions
    #39812866
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
McCar,

IF @var IS NOT NULL
SELECT ..
...
Рейтинг: 0 / 0
Conditional usage of inline SQL functions
    #39812867
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
McCar,

используйте опцию
Код: sql
1.
option (recompile)
...
Рейтинг: 0 / 0
Conditional usage of inline SQL functions
    #39812872
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
McCarЭто все понятно, но в run-time он в эту функцию реально заходит, и только после этого оценивает условие.Вы этот вывод сделали из формы плана?
...
Рейтинг: 0 / 0
Conditional usage of inline SQL functions
    #39812883
McCar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmMcCarЭто все понятно, но в run-time он в эту функцию реально заходит, и только после этого оценивает условие.Вы этот вывод сделали из формы плана?
Похоже вывод был неправильный.
Реальное значение "Number of Executions" там ноль.
Заказчик тут панику поднял что 100% стоимости запроса занимает вызов этой функции.
Спасибо
...
Рейтинг: 0 / 0
Conditional usage of inline SQL functions
    #39812916
McCar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ffMcCar,

используйте опцию
Код: sql
1.
option (recompile)


Спасибо, работает.
...
Рейтинг: 0 / 0
Conditional usage of inline SQL functions
    #39814222
-- KAB --
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Conditional usage of inline SQL functions
    #39814274
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-- KAB --у вас parameter sniffing...Нет там такого. Посмотрите внимательнее на предикат в where.
С этим запросом вообще озвученной проблемы нет, потому что в одном из фильтров на внешнем входе первого NL срабатывает Startup Expression Predicate по @Find_What is not null.
Что ТС и подтвердил - 21884204 .
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Conditional usage of inline SQL functions
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]