【SQL优化】使用子查询可提升 COUNT DISTINCT

本文探讨了如何使用子查询优化SQL中的COUNT DISTINCT操作,以提高查询性能。通过先聚合再JOIN以及缩小数据集的方法,显著减少了查询时间。在大数据集上,这种方法能提供更快更准确的结果,尤其是在基数较小的情况下。
摘要由CSDN通过智能技术生成

Count distinct是SQL分析时的祸根,因此它是我第一篇博客的不二选择。

首先:如果你有一个大的且能够容忍不精确的数据集,那像HyperLogLog这样的概率计数器应该是你最好的选择。(我们会在以后的博客中谈到HyperLogLog。)但对于需要快速、精准答案的查询,一些简单的子查询可以节省你很多时间。

让我们以我们一直使用的一个简单查询开始:哪个图表的用户访问量最大?

select 
  dashboards.name, 
  count(distinct time_on_site_logs.user_id)
from time_on_site_logs 
join dashboards on time_on_site_logs.dashboard_id = dashboards.id
group by name 
order by count desc

首先,我们假设user_id和dashboard_id上已经设置了索引,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值