[大数据学习之ClickHouse]12-ClickHouse高级进阶之单表/多表优化

单表优化

PreWhere代替Where

PreWhere和Where的效果/语法都是一致的,都是用来过滤数据
但是PreWhere仅仅支持表引擎为*MergeTree
PreWhere的性能是Where的数十倍之多,CLK内部默认开启了优化操作,就算写的是Where,底层也会优化成PreWhere,不过官方还是建议尽量多的使用PreWhere
需要主要注意的是,PreWhere也会有失效的情况
如下图所示:
在这里插入图片描述

分区查询和字段裁剪

没什么好说的,基本所有组件都是这种情况,尽量避免select*这种写法,最好是从分区中查询并且在此基础上查询出你想要的列,字段越少,消耗的IO资源越少,性能也就越高

order by + limit

尽量多的使用order和limit组合查询,尤其是数据量很大的情况下

避免虚拟列的产生

虚拟列指的就是表中没有的字段,比如
select a,b,a+b from test
a+b就是一个虚拟列,如果业务无法避开这种情况,建议在数仓的上一层进行计算,多落几个字段出来

uniqCombined 替代 distinct

Count(distinct xxx )这种写法在任何计算框架中都是毁灭性的打击
如果业务可以接受**2%**左右的误差值,可以使用uniqCombined(xxx)这种方式来代替Count(distinct xxx )的计算方式.虽然笔者并不这样建议

其他补充

设置单个SQL的查询时常,避免个别查询引起的服务雪崩
配置join_use_nulls,该配置可以在表与表关联的时候避免null值,从而使用默认值填充的效果

多表优化

CLK的JOIN(不论是哪种JOIN)是将右表的数据给放到内存中,然后逐条去匹配,所以CLK的官方建议是尽量减少JOIN操作
如果业务不可避免的做JOIN操作,在多表JOIN的时候要满足小表在右的原则
分布式情况下可以使用GLOBAL关键字进行开销损耗的减少
增加逻辑提前过滤/将常用的表作为字典表常驻于内存之中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值