Clickhouse 五条最佳实践建议
Clickhouse 五条最佳实践建议
建表时,主键字段离散度从小到大
ClickHouse中的primary key索引有一个致命问题是,当前缀列的离散度(distinct value count)非常大时,在后续列上的过滤条件起到的"跳跃"加速作用就很微弱了。
order by的第一个列一定不要重复放到partition by里,一般来说时间列更适合放在partition by上
partition by和order by都是让数据存放达到"有序状态"的技术,定义的时候应当尽量错开使用不同的列来定义两者
更新操作最好是批量更新
更新操作是一次更新一整个分区,所以如果更新的数据涉及的分区数越少,就有越好的速度
更新不能涉及主键和分区键,更新操作不是原子性的
建表时,尽量设计成宽表,不要担心添加太多冗余字段,以减少未来可能的联表查询
clickhouse联表查询(join操作)非常消耗内存
在写入压力不大的情况下,使用物化视图和预聚合物化视图可以极大加速查询速度
需要注意的是,预聚合物化视图建表语句中的 order by 需要包括所有的 group by 字段,否则后续查询时,不在order by 中的 group by字段是无效的
License:
CC BY 4.0