Запрос выполняется дольше, добавляя неиспользуемые условия WHERE

Я наткнулся на интересную загадку (по крайней мере, мне интересно). Ниже приводится общее представление о том, как выглядит мой запрос. Предположим, что @AuthorType является входом для хранимой процедуры и что в каждом месте, где я размещаю комментарии, существуют различные специализированные условия.

SELECT *
FROM TBooks
WHERE
(--...SOME CONDITIONS)
OR
(@AuthorType = 1 AND --...DIFFERENT CONDITIONS)
OR
(@AuthorType = 2 AND --...STILL MORE CONDITIONS)

Что меня интересует, так это то, что если я выполню этот SP с @AuthorType = 0, он будет работать медленнее, чем если бы я удалил два последних набора условий (те, которые добавляют условия для специализированных значений @AuthorType).

Разве SQL Server не должен осознавать во время выполнения, что эти условия никогда не будут выполнены, и полностью их игнорировать? Разница, которую я испытываю, не маленькая; это примерно удваивает длину запроса (1-2 секунды до 3-5 секунд).

Я ожидаю, что SQL Server слишком оптимизирует это для меня? Мне действительно нужно иметь 3 отдельных SP для специализированных условий?

Ответы на вопрос(3)

Ваш ответ на вопрос