неожиданно медленно

Jan 21, 2020 02:27

Банальность, есть пара таблиц - группы и привязанные к ним элементы, примерно 2.5К групп, 3.3М элементов. Часть групп пустая.

--- группа ---
gr_id int
name varchar(64) utf8_general_ci

--- элемент ---
el_id int
group_id int
code varchar

Нужно получить все группы с количеством элементов в них.

SELECT groups.*, count(el_id) as cnt FROM groups left join elements using (gr_id) GROUP BY gr_id
Нормально, выполняется за 150 мс

SELECT groups.*, count(el_id) as cnt FROM groups left join elements using (gr_id) GROUP BY gr_id ORDER BY name
Выполняется за 50 _секунд_
Медленее в 300 с хреном раз.

SELECT * FROM
(
SELECT groups.*, count(el_id) as cnt FROM groups left join elements using (gr_id) GROUP BY gr_id
) as q
ORDER BY name
Выполняется за те же 50 секунд

$%^, ПОЧЕМУ?! Моя фантазия пасует.
Сортировка должна выполняться на полностью сформированной выборке.
Сортировка 2к5 строк не занимает минуту. Ни при каких раскладах.

UPD
Таки что скажет купечество? Ни у кого нет соображений?

написание запроса, оптимизация

Previous post Next post
Up