組み込み型全文検索エンジンSenna
とりあえず Wikipedia のデータ全文投入してインデックス作ってみたよ。
■データサイズ
37822464 2009-06-19 01:03 wiki.001.SEN
387616768 2009-06-19 01:03 wiki.001.SEN.i
1073614848 2009-06-19 01:03 wiki.001.SEN.i.c
1073741824 2009-06-19 01:03 wiki.001.SEN.i.c.001
247463936 2009-06-19 01:02 wiki.001.SEN.i.c.002
801185792 2009-06-19 01:03 wiki.001.SEN.l
4686036956 2009-06-19 01:03 wiki.MYD
15630336 2009-06-19 01:03 wiki.MYI
MYD と MYI の合計が 5G 弱、
SEN と SEN.i と SEN.l の合計が 1.2G 強。
■mysqld メモリ使用量
インデックス作成時 → 1.3GB
検索時 → 60MB
■検索にかかる時間
SELECT * FROM wiki WHERE MATCH(text) AGAINST(?) LIMIT 10
で0.5秒くらい
■環境
D945GCLF (ATOM 230)
メモリ: 2GB
OS: Debian 5.0.1 おっと書きかけで送信してしまった
■検索にかかる時間 … 「wiki」や「space」等1万件以上ヒットする単語で検索
SELECT * FROM wiki WHERE MATCH(text) AGAINST(?) LIMIT 10
→初回0.2秒、2回目以降2ミリ秒
SELECT * FROM wiki WHERE MATCH(text) AGAINST(?) LIMIT 10000
→初回40〜60秒程度、2回目以降1.5秒程度
■環境
D945GCLF (ATOM 230)
メモリ: 2GB
HDD: 40GB の IDE
OS: Debian 5.0.1 (32bit)
…ということで、LIMIT さえ効かせれば1秒以下で検索できるよ。
オンメモリじゃないとシーケンシャルスキャンより遅くなってもおかしくないとかアホじゃね?
>>218は LIMIT 句付けてないんちゃう?
それかクエリ間違っててインデックス使われてないとか