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-5.0.51a-Tritonn-1.0.9

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)