SQL Tips

 

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

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」演算子は便利ですが、必ず必要な時のみ使用してください。
このエントリーをはてなブックマークに追加
2014-11-22 12:08:32   4950

コメント

[SQL Server] Transact-SQLを使ってSQL Server ユーザーを作成する方法

-.日付:2015-01-16   カテゴリ : -   閲覧数:1453

[SQL Server] SET IDENTITY_INSERT で IDENTITY を設定した列に値を登録する方法

-.日付:2014-11-30   カテゴリ : -   閲覧数:3325

[SQL Server] 月末の日付(月末日)を求めたい / EOMONTH関数 / 月末日を取得

-.日付:2014-11-23   カテゴリ : -   閲覧数:12132

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

-.日付:2014-11-22   カテゴリ : -   閲覧数:4950

[SQL Server] IPアドレスを数字に変更する方法

-.日付:2014-10-26   カテゴリ : -   閲覧数:1718

[SQL Server] GeoIPを利用してIPアドレスの国情報を取得する方法

-.日付:2014-10-25   カテゴリ : -   閲覧数:6211

Copyright © 2015 INNOYA.COM All rights reserved. RSS