ClickHouse学习(六)语法优化

本文介绍了如何在ClickHouse中高效处理数据,包括子查询中的去重、谓词下推、聚合计算优化、冗余函数剔除和标量替换,以及三元运算的性能改进。通过实例展示和设置优化参数,提升查询性能和数据库管理效率。
摘要由CSDN通过智能技术生成


导入官方数据

去官网下载
在这里插入图片描述
上传至虚拟机
在这里插入图片描述
将文件解压到clickhouse自己的数据文件夹中

[root@spark01 data]# tar -xvf hits_v1.tar -C /var/lib/clickhouse
[root@spark01 data]# tar -xvf visits_v1.tar -C /var/lib/clickhouse

在这里插入图片描述
由于导入数据后会是root用户,所以得将用户进行修改,进入data和文件夹下修改用户
在这里插入图片描述

[root@spark01 data]# chown -R clickhouse:clickhouse /var/lib/clickhouse/data/datasets/
[root@spark01 data]# chown -R clickhouse:clickhouse /var/lib/clickhouse/metadata/datasets/

在这里插入图片描述
修改完后重启clickhouse服务
进入clickhouse就能发现多了一个数据库
在这里插入图片描述

子查询重复字段

当查询的字段中出现了相同的字段时,clickhouse会自动去重
在这里插入图片描述
优化后的语法:自动将UserID进行去重
在这里插入图片描述

谓词下推

当语句中含有group by时且只有having时,having会转换成where并将其提前运行

EXPLAIN SYNTAX SELECT UserID FROM hits_v1 GROUP BY UserID HAVING UserID = 
'8585742290196126178';

在这里插入图片描述
在子查询中直接写where就行不用写having
优化后不会将提上来的where语句删除
优化后:
在这里插入图片描述

聚合计算外推

先将其聚合后再进行计算

EXPLAIN SYNTAX
SELECT sum(UserID * 2)
FROM visits_v1

优化后:
在这里插入图片描述

聚合函数消除

由于是根据UserID分组,所以max(UserID)没有意义,clickhouse会自动将其删除

EXPLAIN SYNTAX
SELECT
 sum(UserID * 2),
 max(VisitID),
 max(UserID)
FROM visits_v1
GROUP BY UserID

在这里插入图片描述

标量替换

标量是一个固定的值
mysql中with…as的作用是生成一张临时表

将其转换成标量
在这里插入图片描述

三元运算优化

settings optimize_if_chain_to_multiif = 1;开启三元运算

EXPLAIN SYNTAX 
SELECT number = 1 ? 'test1' : (number = 2 ? 'test2' : 'test3') 
FROM numbers(10) 
settings optimize_if_chain_to_multiif = 1;

优化结果: 其中multiIf为多行判断
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值