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))