[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のチューニングとかわからないので、一冊買ってみることにした。

実践ハイパフォーマンスMySQL

実践ハイパフォーマンスMySQL