2013-05-13 3 views
0

У меня есть запрос с группой по сумме и сумме. У меня около 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 как ключ. Я не понял этого поведения.

Может кто-нибудь объяснить?

+0

Оптимизация запросов - это не моя сила, но кажется, что сложный индекс только на (companydm_id, датm_id, topicgroupdm_id, рейтинг) поможет. – Strawberry

ответ

1

Объяснение должно запускать зависимые запросы, прежде чем он сможет запустить главный.

Вам нужно проверить индексирование на AGG_EXTERNALINDIVIDUAL.

+0

Я добавляю второе голосование за проблему индексирования. –

+0

Какая комбинация индекса увеличит производительность. У меня есть индекс для комбинации столбцов, используемых в where и group by. aggEI.ei_uuid, aggEI.companydm_id, aggEI.datedm_id, aggEI.topicgroupdm_id – Sarath

+0

У вас есть индексы по отдельным столбцам, но объяснение показывает, что это используется только с помощью datem_id_UNIQUE, и он просматривает 197,865 записей. Если этот запрос запущен на регулярной основе, вы можете создать индекс сразу для нескольких столбцов. – Lawson

Смежные вопросы