MS-SQL / SQL Server
LIKEを利用して検索する時パフォーマンスに注意事項
データを検索するよく使う「LIKE」!!
この「LIKE」演算子はすごく便利ですが、その分注意が必要です。
「LIKE」と一緒に使う「%」の位置によって結果及びパフォーマンスが異なります。
例として、下記のようなSQLを準備しました。
SELECT TOP 20 * FROM dbo.Board WITH (NOLOCK)
WHERE Title LIKE 'テ%'
SELECT TOP 20 * FROM dbo.Board WITH (NOLOCK)
WHERE Title LIKE '%テ%'
これを実行した結果から見てみましょうか。
下記のイメージは「実行プラン」を表示した上記のSQLの結果になります。
現在、テストしている「dbo.Board」テーブルの「Title」カラムにはindex(インデックス)が設定されています。
まず、1番目のSQLからみましょう。
「テ」から始まるデータを検索しています。
SELECT TOP 20 * FROM dbo.Board WITH (NOLOCK)
WHERE Title LIKE 'テ%'
この場合、「実行プラン」を見ますと「Index Seek」と書いてあります。
これは index を利用して検索したと意味です。
つまりLIKE検索でもindexを利用しますし、その分検索速度も速いです。
では、2番目のSQLを見ましょう。
前後に「テ」を含めるデータを検索します。
SELECT TOP 20 * FROM dbo.Board WITH (NOLOCK)
WHERE Title LIKE '%テ%'
この場合は、検索語「テ」がどこに入っているか分からないので
「実行プラン」にも「Clustered Index Scan」。。
つまりFull Scan。。dbo.Boardテーブルの全データを確認したと言う意味です。
データが多ければ多いほど遅くなります。
「LIKE」演算子は便利ですが、必ず必要な時のみ使用してください。