2ind機能のおさらい
とりあえずおさらいしておく。
2ind機能はMySQL+Sennaにおける、全文検索特有の性能問題を解消すべく実装された、Tritonnパッチの機能(Senna本体じゃなくてパッチで実装している)です。
ここでいう全文検索特有の性能問題とは、以下の4つです。
- limit指定で出力を制限しても応答が遅い問題
- select columns from table where match(a) against(b) limit 1000, 10
- count(*)等で件数を取得するだけでも応答が遅い問題
- select count(*) from table where match(a) against(b);
- 全文検索以外の条件で絞り込む処理が遅い問題
- select columns from table where match(a) against(b) and c like 'hoge%';
- 全文検索以外の条件でソートする処理が遅い問題
- select columns from table where match(a) against(b) order by c;
2ind機能を使うと上記パタンを高速化してくれます。
使いかたは、SESSION変数の"senna_2ind"をONに設定する。上記1、2についてはそれだけでOK。上記3、4についてはFORCE INDEX修飾子を付与することで利用可能です。
- select columns from table force index(c) where match(a) against(b) and c like 'hoge%';
- select columns from table force index(c) where match(a) against(b) order by c;
ただし効能はやや限定的で、全文検索で大量のレコードがヒットしたことによるIO処理がボトルネックとなっている場合にのみ発揮されます。またクエリパタンによっては効果が発揮されなかったり、悪いケースでは間違った結果を返す場合があります。
したがって、2ind機能そのものを現在はβ版と位置付けているわけですが、これをGAにしたいわけです。というかするのです。