RuleId |
SR0006 |
カテゴリ |
Microsoft.Performance |
互換性に影響する変更点 |
なし |
原因
比較の一部として、式に列参照が含まれています。
規則の説明
列参照を含む式が比較される場合、コードでテーブル スキャンが実行される可能性があります。
違反の修正方法
この問題を解決するには、列参照が式の内部ではなく比較演算子の片側に単独で表示されるように、比較方法を修正する必要があります。 比較演算子の片側に列参照が単独で存在するコードを実行すると、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))