RuleId |
SR0005 |
カテゴリ |
Microsoft.Performance |
互換性に影響する変更点 |
なし |
原因
WHERE 句の LIKE 述語がワイルドカード文字 "%" で始まっています。
規則の説明
"%パターン文字列" などの LIKE 述語を含む WHERE 句を使用して、列の任意の場所で検出される可能性があるテキストを検索すると、テーブル スキャンが実行されることがあります。
違反の修正方法
この問題を解決するには、ワイルドカード (%) 以外の文字で始まるように検索文字列を変更するか、フルテキスト インデックスを作成する必要があります。
警告を抑制する状況
この警告が生成されたステートメントをほとんど使用しない場合、またはテーブルに数行しか行が含まれない場合は、この警告を抑制してかまいません。
使用例
最初の例では、検索文字列がワイルドカード文字で始まるため、SELECT ステートメントはテーブル スキャンを実行します。 2 番目の例では、検索文字列がワイルドカード文字で始まっていないため、ステートメントはインデックス シークを実行します。 インデックス シークでは、WHERE 句と一致する行だけが取得されます。
SELECT [dbo].[Table2].[ID], [dbo].[Table2].[c1], [dbo].[Table2].[c2], [dbo].[Table2].[c3], [dbo].[Table2].[Comment]
FROM dbo.[Table2]
WHERE Comment LIKE '%pples'
SELECT [dbo].[Table2].[ID], [dbo].[Table2].[c1], [dbo].[Table2].[c2], [dbo].[Table2].[c3], [dbo].[Table2].[Comment]
FROM dbo.[Table2]
WHERE Comment LIKE 'A%'