今日は仕事納めだったので、一年の締めくくりとしてMySQLにおけるソートの話でもしようと思う。 インデックスを利用しないクエリで最もよく見かけるもののひとつは、ORDER BYを用いたソート処理だろう。もし、ソート処理においてインデックスを用いることが出来れば、MySQLは結果を抽出してから結果行をソートするのではなく、インデックス順に行を取り出せば良いので高速にソート処理することが可能になる。特に、LIMIT句やWHERE句を用いて行の絞り込みを行う場合は効果が絶大である。しかし、ひとたびインデックスを利用できない状況に直面すると、たちまちテーブルスキャンが発生して性能が劣化してしまう。 例えば、100万行のレコードを格納したt1というテーブルがあるとする。そのテーブルに対して以下のようなクエリを実行した場合を考えよう。 mysql> SELECT col1, col2 ... colx
![オトコのソートテクニック2008](https://cdn-ak-scissors.b.st-hatena.com/image/square/f987a01e7dac2537ce07cc613d2e97aa0fb67561/height=288;version=1;width=512/https%3A%2F%2Fblogger.googleusercontent.com%2Fimg%2Fb%2FR29vZ2xl%2FAVvXsEhC2tTU5V9RRg07rhVQF8HlwWiROGvVM5REgCLy8wYXoDFeRmBd-e7xYVBbNrSKSmdISOqNMlFvldnPuj_0epwzQQ_p_gTwi_6thhwCt3Oe2xL1Z_q8YglGq8ThCnTRpO_a3DKAiwTnYHk%2Fw1200-h630-p-k-no-nu%2FPicture%2B2.png)