groongaの全文検索とMySQLのLike検索の速度比較

MySQL5.1でLIKE検索を使う場合と、groonga storage engine(以下、groonga)で全文検索するときの時間について計測しました。


LIKE検索はインデックスされていないカラムを一つづつ確かめる方法です。


groongaの場合は、あらかじめインデックスされたカラムを検索しています。


前提条件

前提条件は次のとおりです。

  • テーブル:innodbMySQLのLIKE検索)、groonga(groongaでmatch)
  • MySQLバージョン:5.1.54
  • groonga storage engineバージョン:0.4
  • groongaバージョン:1.0.6-1
  • データ:5万件(所定カラムに日本の住所がランダムで入っている)
  • カラム数:35カラム(所定カラム以外は、ランダムの数字が入っている)
  • 計測方法:所定カラムに東京を含むレコードを抽出する時間数を計測
1.MySQLのLIKE検索

MySQLでLIKE検索を行います。

select * from hoge_table_innodb where address like '%東京%';

4053 rows in set (0.73 sec)
回数 秒数
1 0.73sec
2 0.47sec
3 0.29sec
4 0.33sec
5 0.34sec
6 0.57sec
7 0.54sec
8 0.54sec
9 0.41sec
10 0.58sec

ばらつきがありますが、0.5秒が多いようです。


2.groongaのmatch検索

同じようにgroongaテーブルを全文検索してみます。

select * from hoge_table_groonga where match(address) against('東京');

4053 rows in set (0.16 sec)
回数 秒数
1 0.16sec
2 0.27sec
3 0.18sec
4 0.15sec
5 0.18sec
6 0.19sec
7 0.14sec
8 0.17sec
9 0.13sec
10 0.12sec

0.1秒台が続出です。



MySQLとgroongaの検索比較の結果

最大値と最小値と平均について比較してみました。


種別 最大 最小 平均
MySQL_LIKE 0.73sec 0.29sec 0.48sec
groonga_MATCH 0.27sec 0.12sec 0.169sec


比較の結果、MySQLのLIKE検索より、groonga検索のほうが2.84倍も高速でした。