У меня есть запрос MySQL, который последовательно занимает 7 секунд, чтобы закончить:Низкая производительность запросов в MySQL присоединиться к группе К
SELECT g.GroupID, g.GroupName, count(s.EventDate) AS Total
FROM Groups g
LEFT JOIN Schedule s
ON g.GroupID = s.GroupID
WHERE g.OrganizationID = 2
AND g.IsActive = 1
AND IFNULL(g.IsDeleted,0) = 0
AND IFNULL(g.IsHidden,0) = 0
AND (s.EventDate > DATE_ADD(NOW(), INTERVAL 0 HOUR) OR g.CreateDate > DATE_ADD(DATE_ADD(NOW(), INTERVAL -1 DAY), INTERVAL 0 HOUR))
GROUP BY g.GroupID, g.GroupName
ORDER BY s.EventDate, g.GroupName;
Я уже следующие показатели:
ALTER TABLE Groups ADD INDEX (OrganizationID);
ALTER TABLE Groups ADD INDEX (IsActive);
ALTER TABLE Groups ADD INDEX (CreateDate);
ALTER TABLE Groups ADD INDEX (IsDeleted);
ALTER TABLE Groups ADD INDEX (IsHidden);
ALTER TABLE Groups ADD INDEX (GroupName);
ALTER TABLE Schedule ADD INDEX (EventDate);
Перед показатели были добавлен запрос занимает 18 секунд, так что это уже значительное улучшение. Но я не могу понять, почему этот запрос все еще занимает так много времени. Самая большая таблица в соединении - Schedule
, которая имеет 13 216 записей - не огромная таблица! Остальные таблицы намного меньше.
EXPLAIN результаты:
Что я могу сделать, чтобы улучшить свою производительность запросов?
Что говорит план выполнения? – Taryn
Почему вы делаете Date_add 0 часов? –