李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
大数据
正文
09.ClickHouse查看执行计划
Leefs
2022-05-04 AM
1986℃
0条
[TOC] ### 一、概述 在clickhuse20.6版本之前要查看SQL语句的执行计划需要设置日志级别为trace才能可以看到,并且只能真正执行sql,在执行日志里面查看。在20.6版本引入了原生的执行计划的语法。在20.6.3版本成为正式版本的功能。 ### 二、基本语法 ```sql EXPLAIN [AST | SYNTAX | PLAN | PIPELINE] [setting = value, ...] select ...[FORMAT ...] ``` + **PLAN**:用于查看执行计划,默认值。 + **header**:打印计划中各个步骤的head说明,默认关闭,默认值 0; + **description**:打印计划中各个步骤的描述,默认开启,默认值 1; + **actions**:打印计划中各个步骤的详细信息,默认关闭,默认值 0。 + **AST**:用于查看语法树; + **SYNTAX**:用于优化语法; + **PIPELINE**:用于查看 PIPELINE 计划。 + **header**:打印计划中各个步骤的head说明,默认关闭; + **graph**:用 DOT 图形语言描述管道图,默认关闭,需要查看相关的图形需要配合 graphviz 查看; + **actions**:如果开启了 graph,紧凑打印,默认开启。 *注:PLAN 和 PIPELINE 还可以进行额外的显示设置,如上参数所示。* ### 三、案例实操 #### 3.1 新版本使用EXPLAIN 可以再安装一个 20.6 以上版本,或者直接在官网的在线 demo,选择高版本进行测试。 **(1)查看PLAIN** + **简单查询** ```sql explain plan select arrayJoin([1,2,3,null,null]); ``` ![09.ClickHouse查看执行计划01.jpg](https://lilinchao.com/usr/uploads/2022/05/1815779443.jpg) + **复杂 SQL 的执行计划** ```sql explain select database,table,count(1) cnt from system.parts where database in ('datasets','system') group by database,table order by database,cnt desc limit 2 by database; ``` ![09.ClickHouse查看执行计划02.jpg](https://lilinchao.com/usr/uploads/2022/05/3120676407.jpg) + **打开全部的参数的执行计划** ```sql EXPLAIN header=1, actions=1,description=1 SELECT number from system.numbers limit 10; ``` ![09.ClickHouse查看执行计划03.jpg](https://lilinchao.com/usr/uploads/2022/05/1186416898.jpg) **(2)AST 语法树** ```sql EXPLAIN AST SELECT number from system.numbers limit 10; ``` ![09.ClickHouse查看执行计划04.jpg](https://lilinchao.com/usr/uploads/2022/05/1849766362.jpg) **(3)SYNTAX 语法优化** + **先做一次查询** ```sql SELECT number = 1 ? 'hello' : (number = 2 ? 'world' : 'leefs') FROM numbers(10); ``` ![09.ClickHouse查看执行计划05.jpg](https://lilinchao.com/usr/uploads/2022/05/3389139452.jpg) + **查看语法优化** ```sql EXPLAIN SYNTAX SELECT number = 1 ? 'hello' : (number = 2 ? 'world' : 'leefs') FROM numbers(10); ``` ![09.ClickHouse查看执行计划06.jpg](https://lilinchao.com/usr/uploads/2022/05/317163190.jpg) + **开启三元运算符优化** ```sql SET optimize_if_chain_to_multiif = 1; ``` + **再次查看语法优化** ```sql EXPLAIN SYNTAX SELECT number = 1 ? 'hello' : (number = 2 ? 'world' : 'leefs') FROM numbers(10); ``` ![09.ClickHouse查看执行计划07.jpg](https://lilinchao.com/usr/uploads/2022/05/3384341397.jpg) **(4)查看PIPELINE** ```sql EXPLAIN PIPELINE SELECT sum(number) FROM numbers_mt(100000) GROUP BY number % 20; ``` ![09.ClickHouse查看执行计划08.jpg](https://lilinchao.com/usr/uploads/2022/05/1542017281.jpg) + **打开其他参数** ```sql EXPLAIN PIPELINE header=1,graph=1 SELECT sum(number) FROM numbers_mt(10000) GROUP BY number%20; ``` #### 3.2 老版本查看执行计划 ```sql clickhouse-client -h 主机名 --send_logs_level=trace <<< "sql" > /dev/null ``` 其中,`send_logs_level` 参数指定日志等级为 trace,<<<将 SQL 语句重定向至 `clickhouse-client`进行查询,`> /dev/null` 将查询结果重定向到空设备吞掉,以便观察日志。 **注意:** + 通过将 ClickHouse 的服务日志,设置到 DEBUG 或者 TRACE 级别,才可以变相实现 EXPLAIN 查询的作用。 + 需要真正的执行 SQL 查询,CH 才能打印计划日志,所以如果表的数据量很大,最好借助LIMIT子句,减小查询返回的数据量。
标签:
ClickHouse
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://lilinchao.com/archives/2058.html
上一篇
08.ClickHouse副本和分片介绍
下一篇
10.ClickHouse建表优化
评论已关闭
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
NLP
4
标签云
Spark RDD
Shiro
gorm
ClickHouse
Tomcat
JavaScript
Java
CentOS
Map
ajax
前端
国产数据库改造
nginx
JVM
Hive
Azkaban
查找
Sentinel
排序
GET和POST
SpringCloud
Quartz
Ubuntu
高并发
稀疏数组
哈希表
微服务
DataWarehouse
数据结构和算法
递归
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭