У меня довольно большой запрос внутри SP, который может возвращать довольно много результатов на основе переменных. 1 сегмент должен возвращать определенные значения, если переменная имеет значение, или все, если переменная не имеет значения.
В основном я пытаюсь это:
@var = 'Not Empty'
Select * from Table
where (
(
x = @var
and ...(extra stuff)
)
or @var = ''
)
and y = ... (lots of extra stuff)
Как бы то ни было, чтобы загрузить это целую вечность.
Если я удаляю ИЛИ, он запускается мгновенно.
Я не могу понять, почему серверу sql так трудно понять, что делать.
Я мог бы просто сделать два запроса и поместить их в if, но я бы не стал, так как остальная часть запроса довольно велика, и мне нужно было бы изменить дважды.
Кто-нибудь знает, что происходит под капотом, который делает это медленным?