Помогите оптимизировать запрос

D
На сайте с 28.06.2008
Offline
1114
587

Смотрю в логах медленных запросов часто мелькает запрос вида:

SELECT a.*, COUNT(b.id) AS count FROM `jos_community_groups_category` AS a LEFT JOIN `jos_community_groups` AS b ON a.id=b.categoryid AND b.published='1' WHERE a.parent='0' GROUP BY a.id ORDER BY a.name ASC;

Выполняется от 4 до 6 секунд. Можно ли его как-то оптимизировать?

bay_ebook
На сайте с 28.05.2010
Offline
111
#1

GROUP BY - сам по себе достаточно меленный, особенно на больших объемах. Желательно как-то от него избавится.

+ проверте или все поля которые участвуют в условиях (JOIN, WHERE, ORDER BY) являются индексами - ускорит.

Нужен прогер на php+mysql+понимание чужего кода? (/ru/forum/540660) Вам сюда PHP-шаман (http://php-shaman.pw/)
[Удален]
#2

Отказаться от group by можно предварительно с аггрегировав данные, и запросы выполнять уже на агрегированных данных

Funaki
На сайте с 13.09.2008
Offline
130
#3

Попробуй так


SELECT a.*,
IFNULL((
SELECT COUNT(b.id) FROM `jos_community_groups` AS b
WHERE a.id=b.categoryid AND b.published='1' AND a.parent='0'), 0) as count
FROM `jos_community_groups_category` AS a
ORDER BY a.name ASC;
D
На сайте с 28.06.2008
Offline
1114
#4

Огромное спасибо!!!!!!!!!!! 1,3 секунды против 6 сек. Супер!!!!!!!

rbbumfirst
На сайте с 03.04.2009
Offline
87
#5

Мне всегда казалось, что JOIN быстрее вложенного запроса.

А не проверить ли пациента на наличие индексов?

jos_community_groups.categoryid
jos_community_groups.published
jos_community_groups_category.parent

Web developer (http://rudov.com). разработка на Go, ReactJS, React Native
D
На сайте с 28.06.2008
Offline
1114
#6

Индексов нет, но я не знаю как их добавить :(

П
На сайте с 30.10.2012
Offline
0
#7

Дяденька не слушайте что вам говорят, выполните этот запрос в пхпмуадмин

ALTER TABLE `jos_community_groups` ADD INDEX (`categoryid`)

Будет работать крест на пузе даю, и родные запросы трогать не надо.

D
На сайте с 28.06.2008
Offline
1114
#8

Первоклассник - СПАСИБО! Я так понял это добавило индексы? Теперь запрос выполняется 0,09 сек :)

[Удален]
#9

Сам себе ответил :)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий