MySQL (Tritonn) の動作について
最新tritonnで
SELECT MATCH(col1, col2, col3) AGAINST('W.... query' IN BOOLEAN MODE) AS score Where MATCH(col1, col2, col3) AGAINST('W.... query' IN BOOLEAN MODE) ORDER BY score DESC;
が異常に遅いのはなんでなんでしょう。
http://mt.endeworks.jp/d-6/2007/12/tritonn.html
MySQL のオプティマイザは MATCH(...) 内に指定された各カラムのデータが MySQL コア内での演算に必要だと判断し、Tritonn のストレージエンジンに対して、行データの読み込みを要求します。つまり、上のクエリでは、条件に合致する全行について、行データの読み込みが発生します。そして、読み取られたデータは使われないまま廃棄される... w
大量の I/O が発生しているのは、それが原因でしょう。決してソートが遅いわけではないと思います。
この問題は拙作のパッチで直したつもり。senna_embedded_pkey=ON にしてテーブル作り直す必要があるけど。
的外れだったらごめんなさい。
追記: 手元だとこんな感じ。
mysql> select match(title,body) against ('+a' in boolean mode) as score from content_0_orig where match(title,body) against('+a' in boolean mode) order by score desc limit 10; (snip) 10 rows in set (0.17 sec)
MySQL-5.0.51a-Tritonn-1.0.9 (w. 拙作パッチ)
mysql> select match(title,body) against ('+a' in boolean mode) as score from content_0 where match(title,body) against('+a' in boolean mode) order by score desc limit 10; (snip) 10 rows in set (0.01 sec)