count(distinct) 消耗资源过大的解决方案

本文分享了如何通过预处理和字段转换,将SQL中的7个count(distinct)操作优化,应用于4000万数据量的table_1,显著提升查询速度并解决资源消耗过大问题。关键步骤包括字段加编号、创建ind_1_flag辅助判断,最终通过分组和条件求和实现高效计算。
摘要由CSDN通过智能技术生成

count(distinct) 消耗资源过大的解决方案


前几天接到个需求,有7个字段 计算 如下:
select
stat_date
,count(distinct case when datediff(aprv_date,conf_date) = 0 then uuid else null end) as ind_1
from table_1

其中 table_1 大概有 4000万的数据量 ,7个 count(distinct 差点把服务器跑崩溃,半个小时才跑完。

以下是优化过程:
1,对table_1 做字段加工
row_number() over(partition by aprv_date,uuid order by (
case when datediff(aprv_date,conf_date) = 0 then uuid
else null end ) asc ) as ind_1
,case when datediff(aprv_date,conf_date) = 0 then 1 else 0 end
as ind_1_flag

ind_1_flag 是对 datediff(aprv_date,conf_date) = 0 条件的判断

2 ,再对 table_1 分组求和
sum( case when ind_1_flag = 1 and ind_1 = 1 then 1 else 0 end )

这样优化过后,速度会快很多,资源问题也会解决。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值