groongaの全文検索とMySQLのLike検索の速度比較
MySQL5.1でLIKE検索を使う場合と、groonga storage engine(以下、groonga)で全文検索するときの時間について計測しました。
LIKE検索はインデックスされていないカラムを一つづつ確かめる方法です。
groongaの場合は、あらかじめインデックスされたカラムを検索しています。
前提条件
前提条件は次のとおりです。
- テーブル:innodb(MySQLの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秒台が続出です。