clickhouse优化技巧

参考博客

参考博客2

[TOC]

  1. 执行引擎
  2. 不要用 join
  3. 使用 prewhere 代替 where
  4. 不是用 nullable 【nullable无法被索引】
  5. 近似去重 【uniq 代替 distinct】

不要用join

clickhouse的本身适用于单宽表,多表连接性能下降的很快,join可以用其他语句替代这些来代替,因为使用join的话,简直是灾难,即使是要join,也不要把大表放在右边。这是由于clickhouse的反人类设计,进行join时,clickhouse会将右表全部加载到内存里,再一条条匹配,速度就会迅速降低。

原文链接:https://blog.csdn.net/qq_43662627/article/details/120249248

https://img-blog.csdnimg.cn/6b13f44248ec4579be7de976bc4c32bf.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6I-c6bif5a2m5Lmg5pel6K6w,size_20,color_FFFFFF,t_70,g_se,x_16

使用prewhere替代where

PREWHERE能有效支持过滤,默认是开启的,但仅由系列中的表支持*MergeTree系列引擎

https://img-blog.csdnimg.cn/4c5783427f7c46998ec697e93edb8beb.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6I-c6bif5a2m5Lmg5pel6K6w,size_20,color_FFFFFF,t_70,g_se,x_16

不使用nullable

nullable无法被索引,因此需要,还需要建立特定的文件来标记,因此平常使用建议使用一些标记值替代nullable

近似去重

一些实时的领域,如需要去重,distinct太耗时,可以使用uniq

https://img-blog.csdnimg.cn/b55c50d1a87f498ebcedb38f5b0c90e8.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6I-c6bif5a2m5Lmg5pel6K6w,size_18,color_FFFFFF,t_70,g_se,x_16

清理 log表

1
2
3
alter table  trace_log  modify ttl event_time + interval 1 day;

# 设置 ttl 过期时间是 1