4

MySQL のドキュメントによると、GROUP BY の後に ORDER BY NULL を追加すると、「結果のソートのオーバーヘッドを回避する」必要があります。もしそうなら、なぜクエリをたどるのが約5倍遅いのですか

SELECT COUNT(*) advert_count, category.name
FROM advert
LEFT JOIN category ON advert.category_id = category.category_id
WHERE (
advert.state_id = 2
)
GROUP BY advert.category_id
ORDER BY NULL
LIMIT 5 

ORDER BY advert_count?でクエリするよりも

SELECT COUNT(*) advert_count, category.name
FROM advert
LEFT JOIN category ON advert.category_id = category.category_id
WHERE (
advert.state_id = 2
)
GROUP BY advert.category_id
ORDER BY advert_count DESC
LIMIT 5 

phpMyAdmin プロファイリングから:最初の
クエリ:

Sorting for group   -
Sorting result      0.000002
Sending data        12.069774

2 番目のクエリ:

Sorting for group   2.436986
Sorting result      0.000028
Sending data        0.000021

私はこれに混乱しています。そこで何が起こっているのか誰か説明してもらえますか?

4

1 に答える 1

2

ORDER BY NULL何も注文していません。すべてのレコードは同じ位置になります。

したがって、最初のクエリは、データで見つかった最初の 5 つのグループを選択しています。しかし、2 番目のクエリは、データ内のすべてのグループの結果を計算し、その数に基づいて上位 5 つを見つけています。

これは、あなたが示した最初の 2 つのオーバーヘッドによって生まれます。


3 番目のオーバーヘッドの違いは、データの送信です。データベースに関係のない理由で、実行するとデータの転送に時間がかかりました。これは、その時点でのサーバーまたはネットワークの負荷が原因である可能性があります。

于 2011-07-22T12:13:41.780 に答える