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 into 库1.表1 select * FROM 库2.表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))
分类:
ClickHouse
标签:
ClickHouse
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗