Я создаю отчет, который собирает огромное количество данных, данные для отчета обрели форму представления, которое выполняется примерно от 2 до 9 секунд (что является приемлемым). У меня также есть функция, которая возвращает набор идентификаторов, который должен фильтровать представление:
select *
from vw_report
where employee_id in (select id from dbo.fnc_security(@personRanAsID))
Функция безопасности запускается менее чем за секунду. Однако, когда я объединяю два, как у меня выше, запрос занимает более 15 минут.
И представление, и функция безопасности выполняют довольно много работы, поэтому изначально я думал, что это может быть связано с блокировкой, я не пытался заблокировать функцию безопасности, но это не имело значения.
Какие-нибудь подсказки или уловки относительно того, где я могу пойти не так?
Возможно, стоит отметить, что когда я копирую результат функции в часть инструкции:
select *
from vw_report
where employee_id in (123, 456, 789)
Скорость увеличивается от 2 до 9 секунд.