SQL Server - план выполнения запроса для условных операторов - PullRequest
3 голосов
/ 14 ноября 2008

Как условные операторы (например, IF ... ELSE ) влияют на план выполнения запросов в SQL Server (2005 и выше)?

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

** Отредактировано, чтобы добавить **:

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

DECLARE @condition BIT

IF @condition = 1
BEGIN
    SELECT * from ...
END
ELSE
BEGIN
    SELECT * from ..
END

1 Ответ

2 голосов
/ 14 ноября 2008

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

DECLARE @condition BIT

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...