最新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;
が異常に遅いのはなんでなんでしょう。vmstatみてるとこのクエリが発生すると、10回に1回くらいすげぇ量のI/O (特にINのほう)が発生してるんですが・・・
一回このクエリが実行し終わって、再度同じクエリを投げるとそうとう速くなるのだけど、これはクエリキャッシュっぽい。SQL_NO_CACHEすると同じ事が起きる。いったいどこの何をつかってソートしてるんだ??
追記:間違い。SQL_NO_CACHEしてても、2回目はそれなりに速い。
追記2: ちゃんとLIMIT も使ってる。
追記。結局何を直しても最終的にFilesortになってしまうのが問題だと結論にいたったので、それならORDER BYをやめることにした。Tritonnはどんな理由か知らんがデフォルトでスコア順にソートしてくれないので、442行目あたりに勘だけをたよりに sen_records_sort()を突っ込んでsennaレベルで先にソートすることに。んで、後はソート無し。グッド。
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;
が異常に遅いのはなんでなんでしょう。vmstatみてるとこのクエリが発生すると、10回に1回くらいすげぇ量のI/O (特にINのほう)が発生してるんですが・・・
一回このクエリが実行し終わって、再度同じクエリを投げるとそうとう速くなるのだけど、これはクエリキャッシュっぽい。SQL_NO_CACHEすると同じ事が起きる。いったいどこの何をつかってソートしてるんだ??
追記:間違い。SQL_NO_CACHEしてても、2回目はそれなりに速い。
追記2: ちゃんとLIMIT も使ってる。
追記。結局何を直しても最終的にFilesortになってしまうのが問題だと結論にいたったので、それならORDER BYをやめることにした。Tritonnはどんな理由か知らんがデフォルトでスコア順にソートしてくれないので、442行目あたりに勘だけをたよりに sen_records_sort()を突っ込んでsennaレベルで先にソートすることに。んで、後はソート無し。グッド。
コメント