0

group by と sum を使用したクエリがあります。私は100万近くのレコードを持っています。クエリを実行すると、2.5 秒かかります。group by 句を削除すると、0.89 秒かかります。group by と sum を使用してクエリを最適化する方法はありますか。

 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 テーブルが最初に実行される理由もわかりませんでした。誰か説明できますか?

ei_uuid、companydm_id、datedm_id の組み合わせで AGG_EXTERNALINDIVIDUAL テーブルにインデックスがあります。同じことが aggEI テーブルの可能なキーの下に uid_comp_dt_idx として表示されます。しかし、aggEI テーブルは datedmid_UNIQUE をキーとして取っています。挙動がわかりませんでした。

誰か説明できますか?

4

1 に答える 1