首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有一种方法可以更快地对mysql中的分组数据进行条件计数

有没有一种方法可以更快地对mysql中的分组数据进行条件计数
EN

Stack Overflow用户
提问于 2015-09-01 19:43:05
回答 1查看 43关注 0票数 0

我有一个SQL查询(MYSQL),我希望速度更快。一般的问题是对具有聚合条件的不同键进行计数。也就是说,我喜欢将具有相同键值的行中的列的值相加,然后确定是否应将其包括在计数中。我想出的唯一解决方案是使用子查询进行求和,然后在外部查询中使用having there计算distinct。像这样:

代码语言:javascript
复制
SELECT COUNT(DISTINCT key), sum1, sum2, categoryid
 FROM
 (
SELECT SUM(cnt1) AS sum1,
       SUM(cnt2) AS sum2,
       key,categoryid
FROM table
GROUP BY key,categoryid
  ) as SUBQUERY  
GROUP BY  categoryid 
HAVING (8*sum1)/sum2 > 0;

问题(在我看来)是查询使用子查询,它将生成一个临时表。由于数据集很大(10M行,500K不同的键),这需要大量的时间。看起来应该可以做得更好,因为没有条件的直接distinct计数只需要这个查询时间的十分之一,没有分组的求和只需要很少的时间。

有没有人有关于如何提高性能的想法?

提前感谢!

Lasse

EN

回答 1

Stack Overflow用户

发布于 2015-09-02 15:09:03

实际上,我能够通过将计数distinct转移到内部查询来缩短响应时间。不知道为什么我没早点看出来。显然会使临时表变小。然而,它仍然比没有条件的distinct计数慢4-5倍。

新的select如下所示:

SELECT dist_cnt,sum1,sum2,categoryid FROM ( SELECT COUNT(DISTINCT key) AS dist_cnt,SUM(cnt1) AS sum1,SUM(cnt2) AS sum2,key,categoryid FROM table GROUP BY key,categoryid ) as子查询

其中(8*sum1)/sum2 >0按类别BY分组

无论如何,我认为它应该有可能至少快2倍。Lasse

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32330720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档