2ind機能のおさらい

とりあえずおさらいしておく。

2ind機能はMySQL+Sennaにおける、全文検索特有の性能問題を解消すべく実装された、Tritonnパッチの機能(Senna本体じゃなくてパッチで実装している)です。

ここでいう全文検索特有の性能問題とは、以下の4つです。

  1. limit指定で出力を制限しても応答が遅い問題
    • select columns from table where match(a) against(b) limit 1000, 10
  2. count(*)等で件数を取得するだけでも応答が遅い問題
    • select count(*) from table where match(a) against(b);
  3. 全文検索以外の条件で絞り込む処理が遅い問題
    • select columns from table where match(a) against(b) and c like 'hoge%';
  4. 全文検索以外の条件でソートする処理が遅い問題
    • 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にしたいわけです。というかするのです。