李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
大数据
正文
09.ClickHouse查看执行计划
Leefs
2022-05-04 AM
1374℃
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
标签云
Http
二叉树
Typora
Sentinel
JavaWEB项目搭建
微服务
数据结构和算法
SpringBoot
递归
Thymeleaf
BurpSuite
线程池
Redis
栈
机器学习
稀疏数组
队列
Spark
nginx
Jquery
Python
随笔
Golang基础
Netty
LeetCode刷题
MyBatis-Plus
Tomcat
Java
序列化和反序列化
DataWarehouse
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞