3

条件ステートメント( IF ... ELSEなど)は、SQL Server(2005以降)のクエリ実行プランにどのように影響しますか?

条件文は実行計画の質を低下させる可能性がありますか?また、パフォーマンスを検討する際に注意する必要のある条件文の形式はありますか?

**追加するために編集**:

具体的には、キャッシュされたクエリ実行プランについて言及しています。たとえば、以下のインスタンスでクエリ実行プランをキャッシュする場合、条件付きの結果ごとに2つの実行プランがキャッシュされますか?

DECLARE @condition BIT

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

1 に答える 1

2

そのアプローチでは、計画が頻繁に再コンパイルされます。私は通常、それらを分割しようとするので、最終的には次のようになります。

DECLARE @condition BIT

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

この方法では、エンド ユーザーに違いはなく、MyProc1 と 2 は独自の適切なキャッシュされた実行プランを取得します。1 つのプロシージャ、1 つのクエリ。

于 2008-11-14T11:41:01.687 に答える