У меня есть запрос с группой по сумме и сумме. У меня около 1 миллиона записей. Когда я запускаю запрос, он принимает 2,5 с. Если я удаляю предложение group by, он принимает 0.89s. Есть ли способ оптимизировать запрос, используя группу by и sum вместе.MySQL groupby с суммой
SELECT aggEI.ei_uuid AS uuid,aggEI.companydm_id AS companyId,aggEI.rating AS rating,aggEI.ei_name AS name,
compdm.company_name AS companyName,sum(aggEI.count) AS activity
FROM AGG_EXTERNALINDIVIDUAL AS aggEI
JOIN COMPANYDM AS compdm ON aggEI.companydm_id = compdm.companydm_id
WHERE aggEI.ei_uuid is not null
and aggEI.companydm_id IN (8)
and aggEI.datedm_id = 20130506
AND aggEI.topicgroupdm_id IN (1,2,3,4,5,6,7)
AND aggEI.rating >= 0
AND aggEI.rating <= 100
GROUP BY aggEI.ei_uuid,aggEI.companydm_id
LIMIT 0,200000
Объясните результат, как показано ниже:
1 SIMPLE compdm const PRIMARY,companydm_id_UNIQUE,comp_idx PRIMARY 8 const 1 Using temporary; Using filesort
1 SIMPLE aggEI ref PRIMARY,datedm_id_UNIQUE,agg_ei_comdm_fk_idx,agg_ei_datedm_fk_idx,agg_ei_topgrp_fk_idx,uid_comp_ei_dt_idx,uid_comp_dt_idx,comp_idx datedm_id_UNIQUE 4 const 197865 Using where
Также я не понимаю, почему compdm таблицы выполняется первым. Может кто-нибудь объяснить?
У меня есть индекс на AGG_EXTERNALINDIVIDUAL таблице с комбинацией ei_uuid, companydm_id, датой m_id. То же самое отображается в таблице aggEI под возможными ключами как uid_comp_dt_idx. Но таблица aggEI берет datemid_UNIQUE как ключ. Я не понял этого поведения.
Может кто-нибудь объяснить?
Оптимизация запросов - это не моя сила, но кажется, что сложный индекс только на (companydm_id, датm_id, topicgroupdm_id, рейтинг) поможет. – Strawberry