clickhouse-sql规范(后续持续更新)
- order by 字段默认是主键,没必要的字段不要加,不要加创建时间,业务方的数据不可控,会影响clickhouse里的数据维度
- siphash(业务单号),使用final去重查询,尽量不要用argMax
- 视情况大表按天分区,小表按月分区
- 可变值字段不能添加二级索引,按此字段做条件查询会先走索引在合并数据,查出而外的中间态数据。
- 增加二级索引只对后续新增数据生效,如需对历史数据也走索引,需要按分区刷新数据
- 云clickhouse成本高,如果对预算低,dev/test环境可以自己搭建clickhouse集群。
- 分布式表数据分片一定要均匀,反例:仓数据以仓库编号分片,网格站按网格站编号分片,所以一个仓/网格站的数据都落到一个节点上,到时按仓/网格站查询时无法充分利用集群的计算资源,只是使用了某个节点的计算能力。如果某仓/网格站请求偏多会导致某个节点CPU飙升,查询很慢。建议可以按照order by字段hash分片。
- clickhouse cpu很重要,8C与16C差异很大
- clickhouse Nullable影响查询性能,占用额外存储空间
- 值不变得字段必须使用prewhere特性提升查询性能
- 不允许使用select *
- WHERE和GROUP BY中的列顺序,要和建表语句中order by的列顺序统一。
- 历史数据不再变化的指标可以考虑做缓存