SQL Server - план выполнения запроса для условных операторов

Как условные операторы (например, ЕСЛИ ЕЩЕ) влияют на план выполнения запроса в SQL Server (2005 и новее)?

Могут ли условные операторы вызывать плохие планы выполнения, и есть ли какие-либо формы условных операторов, которых следует опасаться при оценке производительности?

** Отредактировано для добавления **:

Я конкретно имею в виду план выполнения кэшированного запроса. Например, при кэшировании плана выполнения запроса в приведенном ниже примере кэшируются ли два плана выполнения для каждого из результатов условного оператора?

DECLARE @condition BIT

IF @condition = 1
BEGIN
    SELECT * from ...
END
ELSE
BEGIN
    SELECT * from ..
END
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
3
0
2 715
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

При таком подходе вы будете часто перекомпилировать планы. Обычно я пытаюсь разделить их, так что в итоге получается:

DECLARE @condition BIT

IF @condition = 1 
BEGIN 
 EXEC MyProc1
END 
ELSE 
BEGIN 
 EXEC MyProc2
END

Таким образом, нет никакой разницы для конечных пользователей, а MyProc1 и 2 получают свои собственные, надлежащие кэшированные планы выполнения. Одна процедура, один запрос.

@Meff (+1) правильный. Моего предыдущего ответа не было (поэтому я удалил его).

Mitch Wheat 14.11.2008 17:23

Другие вопросы по теме