次の方法で共有


SR0004: IN 述語でインデックスなしの列をテスト式として使用することは避けてください。

RuleId

SR0004

カテゴリ

Microsoft.Performance

互換性に影響する変更点

なし

原因

IN 述語がインデックスのない列を参照しています。

規則の説明

IN 述語の一部としてインデックス化されてない列を参照している WHERE 句がある場合に、テーブル スキャンを実行します。 テーブル スキャンにより、パフォーマンスが低下します。

違反の修正方法

この問題を解決するには、次のいずれかの変更を行う必要があります。

  • インデックスのある列だけを参照するように IN 述語を変更する。

  • IN 述語が参照している、インデックスのないすべての列にインデックスを追加する。

警告を抑制する状況

テーブルに行が数行しか含まれない場合は、この警告を抑制してもかまいません。

使用例

次の例では、単純な SELECT ステートメントが、インデックスのない [c1] 列を参照しています。 2 番目のステートメントでは、この警告を解決するために追加できるインデックスを定義しています。

CREATE PROCEDURE [dbo].[Procedure3WithWarnings]
AS
SELECT [Comment] 
FROM [dbo].[Table2]  
WHERE [c1] IN (1, 2, 3)

CREATE INDEX [IX_Table2_C1]
ON [dbo].[Table2] (c1);

参照

概念

スタティック分析によるデータベース コードの改善