2012-04-21 4 views
1

MySQLの "group by"ステートメントの複雑さはどれですか?クエリの複雑さ分析によるMySQLグループ

私はvaeryの大きなテーブルを管理していますが、クエリーがどれくらい時間がかかるかを計算する方法があるかどうかも知りたいと思います。

+1

SQLはdbmsができるだけ最適化できるように設計されています。とにかく、ちょうどいくつかのプロファイリングをしているのが私の意見ではあなたの最善の策だろう。 – Jasper

答えて

0

この質問は、全体のクエリがどのように見えるのかを知ることで、答えることは不可能です。いくつかのグループバイズは非常に高価ですが、他のグループは非常に安価です。グループ化された値がキャッシュされるなど、グループ内の値がキャッシュされている場合は、データベース内のインデックスの設定方法によって異なります。

たとえば、グループ:

CREATE TABLE t (a INT, KEY(a)); 
SELECT * FROM WHERE 1 GROUP BY a; 

aはインデックスです。

しかし、このようなことは、テーブルスキャンが必要となるため非常に高価です。

キーが使用できない場合、データベースは、句によってグループのためのメモリ内の一時テーブルを作成するすべての値を通過する、の対応する行のインデックスを持つ一時テーブルに各値を挿入する一般
CREATE TABLE t (a INT); 
SELECT * FROM WHERE 1 GROUP BY a; 

結果セットを選択すると、テンポラリ・テーブルから選択し、各列から最初の行を選択し、結果として戻します。 group by節(つまり、MAX()、GROUP_CONCAT()など)を使用する場合は、すべての行を再度フェッチする必要があります。

EXPLAINを使用すると、MySQLがどのような戦略を使用するのか、 'Extra'(実行コストの昇順)、インデックスを使用できる場合は 'filesort'を使用してすべての行を読み込みますディスクが必要になります。カラムには一時的なものが必要な場合は「一時的な使用」が含まれます

関連する問題