У меня есть запрос, как показано ниже, пожалуйста, дайте правильный указатель для этого, таблица контактов имеет более 20 тыс. Записей, и загрузка занимает около 20 секунд. Надеюсь, что предложение group by создает проблему, если я удаляю общую запись group by clause более 300k.MYSQL GROUP BY - медленный запрос
SELECT `a`.*, CONCAT(a.`firstname`, " ", a.`lastname`) AS `cont_name`, CONCAT(a.`position`, "/", a.`company`) AS `comp_pos`, `e`.`name` AS `industry_name`, CONCAT(f.`firstname`, " ", f.`lastname`) AS `created_by`
FROM `contacts` AS `a`
LEFT JOIN `user_centres` AS `b` ON a.user_id = b.user_id
LEFT JOIN `group_contacts` AS `c` ON a.id = c.contact_id
LEFT JOIN `groups` AS `d` ON c.group_id = d.id
LEFT JOIN `industries` AS `e` ON e.id = a.industry_id
LEFT JOIN `users` AS `f` ON f.id = a.user_id
WHERE (1)
GROUP BY `a`.`id`
ORDER BY `a`.`created` desc
Объясняет это как показано на рисунке - 20145 Использование временных; Использование FileSort
Снимите 'группы by'. У вас нет функций агрегации, поэтому это не кажется необходимым. –
Можете ли вы опубликовать полные объяснения и раскладки таблиц? Нужны ли ЛЕВЫЕ ВНЕШНИЕ СОБЫТИЯ, или вы можете просто использовать INNER JOINs? – Kickstart
LEFT JOIN 'group_contacts' AS' c' ON a.id = c.contact_id LEFT JOIN 'groups' AS' d' ON c.group_id = d.id - необязательные объединения ... удалите его – Javaluca