Как условные операторы (например, ЕСЛИ ЕЩЕ) влияют на план выполнения запроса в SQL Server (2005 и новее)?
Могут ли условные операторы вызывать плохие планы выполнения, и есть ли какие-либо формы условных операторов, которых следует опасаться при оценке производительности?
** Отредактировано для добавления **:
Я конкретно имею в виду план выполнения кэшированного запроса. Например, при кэшировании плана выполнения запроса в приведенном ниже примере кэшируются ли два плана выполнения для каждого из результатов условного оператора?
DECLARE @condition BIT
IF @condition = 1
BEGIN
SELECT * from ...
END
ELSE
BEGIN
SELECT * from ..
END


При таком подходе вы будете часто перекомпилировать планы. Обычно я пытаюсь разделить их, так что в итоге получается:
DECLARE @condition BIT
IF @condition = 1
BEGIN
EXEC MyProc1
END
ELSE
BEGIN
EXEC MyProc2
END
Таким образом, нет никакой разницы для конечных пользователей, а MyProc1 и 2 получают свои собственные, надлежащие кэшированные планы выполнения. Одна процедура, один запрос.
@Meff (+1) правильный. Моего предыдущего ответа не было (поэтому я удалил его).