그룹 by 및 sum이 포함 된 쿼리가 있습니다. 약 1 백만 개의 레코드가 있습니다. 쿼리를 실행할 때 2.5 초가 걸립니다. 내가 group by 절을 제거하면 0.89를 얻는다. group 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
결과는 다음과 같습니다 설명 : compdm 테이블이 먼저 실행되는 이유
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
이 또한 내가 이해하지 못했다. 누군가 설명 할 수 있습니까?
나는 ei_uuid, companydm_id, datedm_id의 조합으로 AGG_EXTERNALINDIVIDUAL 테이블에 인덱스를 가지고 있습니다. 가능한 키 밑에있는 aggEI 테이블에 uid_comp_dt_idx로 표시됩니다. 그러나 aggEI 테이블은 datedmid_UNIQUE를 키로 사용하고 있습니다. 나는 그 행동을 이해하지 못했습니다.
누군가 설명 할 수 있습니까?
쿼리 최적화는 내 장점이 아니지만 (companydm_id, datedm_id, topicgroupdm_id, rating)의 복합 인덱스가 도움이 될 것처럼 보입니다. – Strawberry