SR0005: LIKE 述語では ""%"" で始まるパターンの使用は避けてください
規則 ID |
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%'