次の方法で共有


SR0006: 列インデックスを使用するように、列参照を比較演算子の 1 つの側に移動してください

規則 ID

SR0006

分類

Microsoft.Performance

互換性に影響する変更点

なし

原因

比較の一部として、式に列参照が含まれます。

規則の説明

コードで、列参照を含む式を比較すると、テーブル スキャンが実行される可能性があります。

違反の修正方法

この問題を解決するには、比較を修正して、列参照が式の内部ではなく比較演算子の 1 つの側に単体で置かれるようにします。 比較演算子の 1 つの側に列参照だけがあるコードを実行すると、SQL Server では列インデックスを使用でき、テーブル スキャンは実行されません。

警告を抑制する状況

列が比較されているテーブルに少数の行しか含まれない場合は、この警告を抑制できます。

使用例

最初のプロシージャでは、WHERE 句の式に比較の一部として列 [c1] が含まれます。 2 番目のプロシージャでは、比較結果は同じになりますが、テーブル スキャンは不要です。

CREATE PROCEDURE [dbo].[Procedure3WithWarnings]
@param1 int
AS
SELECT [c1], [c2], [c3], [Comment] 
FROM [dbo].[Table2]  
WHERE ([c1] + 5 > @param1)

CREATE PROCEDURE [dbo].[Procedure3Fixed]
@param1 int
AS
SELECT [c1], [c2], [c3], [Comment] 
FROM [dbo].[Table2]  
WHERE ([c1] > (@param1 - 5))

参照

概念

データベース コードの分析によるコードの品質の向上