GROUP BY
節を満たすもっとも一般的な方法は、テーブル全体をスキャンし、各グループのすべての行が連続する新しい一時テーブルを作成することです。それにより、この一時テーブルを使用してグループの発見や集約ファンクション
(ある場合)
の適用が可能になります。場合により、MySQL
はインデックスアクセスを使用することで一時テーブルの作成を回避することが可能です。
GROUP BY
インデックスを使用するためのもっとも重要な前提条件は、すべての
GROUP BY
カラムは同じインデックスから属性を紹介することと、そしてインデックスがキーを正しい順序で保存することです。(たとえば、BTREE
はインデックスであり、HASH
インデックスではありません)。一時テーブルの使用がインデックスアクセスに置き換えることが可能かは、クエリー内でどのインデックス部分が使用されるか、その部分を指定する条件、そして選択された集約ファンクションにもよります。
インデックスアクセスを通して
GROUP BY
クエリーを実行するには次に記述された、2
つの方法があります。最初の方法では、グループ化操作はすべてのレンジ前提
(これがある場合にかぎり)
と共に適用されます。2
つめの方法は、まずレンジスキャンを実行し、その後結果タプルをグループ分けします。
MySQL では、GROUP BY
はソートに使用されるため、サーバーはグループ分けのために
ORDER BY
最適化も適用することがあります。項4.2.13. 「ORDER BY
最適化」
を参照してください。