postgresql count(distinct) 优化实践

描述:业务需要查表,该表大约不到四个G,总行数900w条,一个简单的去重的条件查询需要一分钟四十秒,这是不能忍受的。

原语句:耗时1m40s

select count(DISTINCT sip) from mining_machine where mining_pool='YES';

优化措施:

1:首先想到加索引,索引顺序也很重要,根据sql解析顺序 where 解析在前。

create index count_sip on public.mining_machine(mining_pool,sip);

   2:优化语句,将distinct 变成group by 来表示,distinct会将重复的key在扫描一遍。

select count(*) from (select sip from mining_machine where mining_pool ='YES' group by sip ) t ;

:结论:原语句1m36s ;建立组合索引后 17s ; sql 优化后 536ms。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值