[MySQL]ORDER BY NULL
仕事で、複数キーでGROUP BYをしているSQLでスロークエリが頻発する原因を調べていて、EXPLAINしてみるとUsing filesortが。
MySQL :: MySQL 4.1 リファレンスマニュアル ::5.2.8. MySQL による ORDER BY の最適化によると、
デフォルトでは、クエリで ORDER BY x,y[,...] と指定した場合と同様に MySQL によってすべての GROUP BY x,y[,...] クエリがソートされます。ORDER BY 節を明示的に記述した場合、ソートは発生するものの、MySQL はスピードを損なうことなくそれを最適化します。 クエリに GROUP BY が含まれていて、もし結果のソートのオーバヘッドを回避したいならば、ORDER BY NULL を指定することでソートを抑止できます。 INSERT INTO foo SELECT a,COUNT(*) FROM bar GROUP BY a ORDER BY NULL;
とのこと。内部的にソートされるらしい。
ORDER BY NULLをつけてみると、2分ちょっとかかっていたクエリが2,3秒に落ち着きました。
MySQLのチューニングとかわからないので、一冊買ってみることにした。
- 作者: ジェレミ・D.ザウドニ,デレク・J.ベリング,Jeremy D. Zawodny,Derek J. Balling,林秀幸
- 出版社/メーカー: オライリージャパン
- 発売日: 2004/10
- メディア: 単行本
- 購入: 9人 クリック: 239回
- この商品を含むブログ (53件) を見る