0

当我运行以下查询时,我的速度有些慢(~6s):

SELECT sql_no_cache
    t1.id, t2.id, count(injury.id)
FROM age_group as t1
CROSS JOIN body_part as t2
LEFT JOIN injury 
     ON t1.id = injury.age_group_id 
     AND t2.id = injury.body_part_id
GROUP BY t1.id,t2.id

如果我删除它,GROUP BY那么它会快速执行。

当我使用时EXPLAIN,唯一的区别是GROUP BY它列出了“使用索引;使用临时;使用文件排序”。

我不知道如何避免这种情况。

我们需要能够对伤害表中的任何字段进行分组,因此索引每个组合可能不是一个好的解决方案。

有任何想法吗?

4

1 回答 1

0

您可以在没有连接的情况下进行聚合:

select injury.age_group_id, injury.body_part_id, count(*)
from injury
group by injury.age_group_id, injury.body_part_id

这只会返回有伤害的结果。

如果这表现良好,然后再加入:

select t.id, t2.id, coalesce(injury.cnt, 0)
from age_group as t1 CROSS JOIN
     body_part as t2 left outer join
     (select injury.age_group_id, injury.body_part_id, count(*) as cnt
      from injury
      group by injury.age_group_id, injury.body_part_id
     ) injury LEFT JOIN
     injury ON t1.id = injury.age_group_id and t2.id = injury.body_part_id
于 2013-06-04T01:48:20.367 回答