ClickHouse笔记

执行计划

explain syntax 执行计划-返回优化后的语法

分析语法

group by 后面可以跟with xxx 进行分析,比如上卷,多维分析,聚合

ClickHouse 自带的优化器

谓词下推:

就是将能提前筛选的条件,提前执行筛选,让匹配的结果集尽量小。

比如having后的条件可以挪到where中执行,where的条件可以挪到子查询中的where中执行等等。

聚合计算外推:

聚合函数中的计算语句会优化到聚合函数外面执行,比如sum(price * 3) 会优化成 sum(price) * 3

聚合函数消除:

group by 的字段,如果使用了max min等函数,会被优化器自动消除,因为没有意义。

手动合并分区

optimize table t_table final

ClickHouse SQL注意事项

1、distinct 底层用的 uniqExact

2、用IN代替join

3、如果两张表都很大,用inner join 代替 left right

4、两张分布式表,in join前要加globa关键词,这样右表只会在接受SQL的节点查询一次,然后将结果分发到其他节点上。如果不加,会在每个节点都发起一次对右表的关联查询,而右表又是分布式的,会导致查询右表被查询N的平方次N是分片数量,导致查询放大。

同步库数据,支持想MySql一样的 Select inster语法

insert into1.1 select * FROM2.2 limit 1000;
insert into so_test.t_table_name_all select * FROM default.t_table_all limit 1000;

删除-表 - 操作集群下所有表

DROP table db_name.table_name ON CLUSTER sys_ck_cluster;
DROP table db_name.table_name ON CLUSTER sys_ck_cluster;

删除-分区

ALTER TABLE db_name.table_name DROP PARTITION '20220101'

删除-条件

ALTER TABLE db_name.table_name DELETE WHERE flow_year = '';

更新-条件

ALTER TABLE db_name.table_name UPDATE update_time= now(), name='zhangsan' WHERE id='100'

操作所有集群

ON CLUSTER sys_ck_cluster // sys_ck_cluster 是集群的名字

在所有集群内创建表

CREATE TABLE so_test.test_table_name ON CLUSTER sys_ck_cluster
(
    `id` Int64 COMMENT '系统自动生成id标识',
    ......................................
)
ENGINE = ReplacingMergeTree(sign)
PARTITION BY toYYYYMM(create_date)
PRIMARY KEY create_date
ORDER BY (create_date)
SETTINGS index_granularity = 8192

在所有集群内创建视图

CREATE TABLE so_test.test_table_name_all ON CLUSTER sys_ck_cluster
(
    `id` Int64 COMMENT '系统自动生成id标识',
    .....................................
)
ENGINE = Distributed('sys_ck_cluster',
 'so_test',
 'test_table_name',
 sipHash64(flow_id))
posted @   InkYi  阅读(217)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示