ORDER BY NULL медленнее, чем столбец ORDER BY - PullRequest
4 голосов
/ 22 июля 2011

согласно документации MySQL , добавление ORDER BY NULL после GROUP BY должно " избежать издержек на сортировку результата ".Если да, то почему следующий запрос примерно в 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:
1-й запрос:

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

Я смущен этим, кто-нибудь может объяснить мне, что там происходит?

1 Ответ

2 голосов
/ 22 июля 2011

ORDER BY NULL вообще ничего не заказывает.Каждая запись занимает одну и ту же позицию.

Таким образом, первый запрос выбирает первые 5 групп, найденных в данных.Но второй запрос - это вычисление результатов для всех групп данных и поиск первых 5 на основе подсчета.

Это подтверждается первыми двумя указанными вами издержками.


Разница в 3-ей накладной - отправка данных.По причине, не связанной с базой данных, когда вы запустили ее, для передачи данных потребовалось много времени.Вероятно, это связано с нагрузкой на сервер или сеть в данный момент времени.

...