clickhouse group by 优化神器
clickhouse中有时候会有对大量分散数据进行group by后再筛选的需求
比如3亿条数据按照字段A进行group by,还有2亿条,再根据其他字段的count结果进行筛选:
select A,count(*) from table_t1
group by A
having count(*)>8
因为字段A的分散性,group by 会非常耗费内存且慢
优化方法!!!
将表t1的分片字段改为A,那么表中的数据就会自动按照A值的不同分布在不同的服务器上,那么在用A进行group by 时,实际上是不需要对其他分片的数据进行操作的,本分片group by即可!!
怎么设置只对本分片进行操作呢
就是在group by 语句后面加上一句 :
settings distributed_group_by_no_merge=1
select A,count(*) from table_t1
group by A
having count(*)>8
settings distributed_group_by_no_merge=1
效果杠杠的