[SQL Server] LIKEを利用して検索する時パフォーマンスに注意事項

inno
2014-11-22 12:08 6019 0
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」演算子は便利ですが、必ず必要な時のみ使用してください。

コメント