MySQL の SQL_CALC_FOUND_ROWSがやたら遅い件について
いろいろ調べてみた
検索対象のデータは全文インデックスを貼ったテーブル
中身は15万件程度
対象となる件数は1000件とか
テーブルはMyISAM
んで
SELECT SQL_CALC_FOUND_ROWS * FROM foo WHERE MATCH(bar) AGAINST('hogehgoe' IN BOOLEAN MODE) LIMIT 550, 10;
みたいな感じでやると
初回:3秒ほど
2回目以降:0.14秒とか
ちなみに1回やってしまえばそれ以降は早い・・・(どっかにキャッシュされてんのかな?)
SQL_CALC_FOUND_ROWSをつけないで実行すると0.05秒とか
うーん、謎だ・・・
で、辿りつたのはこの辺
1
http://blog.yappo.jp/yappo/archives/000264.html
2
http://www.l2tp.org/?p=84
1のほうが原因なのかなぁ・・・とか思いつつ、でも2回目以降が早くなる要因が不明
とりあえず全文検索とSQL_CALC_FOUND_ROWSの関連性について調べる必要有り
ちなみにEXPLAINの結果はUsing Where