1

MySQL の「group by」ステートメントの複雑さはどれですか?

私は非常に大きなテーブルを管理していますが、クエリにかかる時間を計算する方法があるかどうかも知りたいです。

4

1 に答える 1

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 句用にメモリ内に一時テーブルを作成し、すべての値を調べ、結果セット内の対応する行へのインデックスを使用して各値を一時テーブルに挿入します。一時テーブルから選択し、各列から最初の行を選択して、結果として送り返します。group by 句ごとに「余分な」行を使用するか (つまり、MAX()、GROUP_CONCAT() などを使用するか) によっては、すべての行を再度フェッチする必要があります。

EXPLAIN を使用して、MySQL が使用する戦略を把握できます。「エクストラ」(実行コストの昇順) インデックスを使用できる場合は「インデックスの使用」、ディスクからすべての行を読み取る必要がある場合は「ファイルソートの使用」 、および一時が必要な場合、列には「Using Temporary」が含まれます

于 2012-04-21T14:42:02.780 に答える