当前位置: 首页 > news >正文

ClickHouse查看执行计划

在clickhouse 20.6版本之前要查看SQL语句的执行计划需要设置日志级别为trace才能可以看到,并且只能真正执行sql,在执行日志里面查看。在20.6版本引入了原生的执行计划的语法。在20.6.3版本成为正式版本的功能。

本文档基于目前较新稳定版21.7.3.14

1.基本语法

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 还可以进行额外的显示设置,如上参数所示。

2. 新版本使用 EXPLAIN

可以再安装一个20.6以上版本,或者直接在官网的在线demo,选择高版本进行测试。

官网在线测试链接:https://play.clickhouse.tech/?file=welcome

1)查看PLAIN

简单查询

explain plan select arrayJoin([1,2,3,null,null]);

复杂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;

打开全部的参数的执行计划

EXPLAIN header=1, actions=1,description=1 SELECT number from system.numbers limit 10;

2AST语法树

EXPLAIN AST SELECT number from system.numbers limit 10;

3SYNTAX语法优化

//先做一次查询
SELECT number = 1 ? 'hello' : (number = 2 ? 'world' : 'atguigu') FROM numbers(10);
//查看语法优化
EXPLAIN SYNTAX SELECT number = 1 ? 'hello' : (number = 2 ? 'world' : 'atguigu') FROM numbers(10);//开启三元运算符优化
SET optimize_if_chain_to_multiif = 1;
//再次查看语法优化
EXPLAIN SYNTAX SELECT number = 1 ? 'hello' : (number = 2 ? 'world' : 'atguigu') FROM numbers(10);//返回优化后的语句
SELECT multiIf(number = 1, \'hello\', number = 2, \'world\', \'xyz\')
FROM numbers(10)

4)查看PIPELINE

EXPLAIN PIPELINE SELECT sum(number) FROM numbers_mt(100000) GROUP BY number % 20;//打开其他参数
EXPLAIN PIPELINE header=1,graph=1 SELECT sum(number) FROM numbers_mt(10000) GROUP BY number%20;

3. 老版本查看执行计划

clickhouse-client -h 主机名 --send_logs_level=trace <<< "sql" > /dev/null

其中,send_logs_level参数指定日志等级为trace,<<<将SQL语句重定向至clickhouse-client进行查询,> /dev/null将查询结果重定向到空设备吞掉,以便观察日志。

注意:

1、通过将ClickHouse的服务日志,设置到DEBUG或者TRACE级别,才可以变相实现EXPLAIN查询的作用。

2、需要真正的执行SQL查询,CH才能打印计划日志,所以如果表的数据量很大,最好借助LIMIT子句,减小查询返回的数据量。

http://www.lryc.cn/news/235821.html

相关文章:

  • 2023-11-17 VsCode使用makefile进行多文件编译
  • Network(四)NAT实现方式与VRRP概述
  • C#_键盘钩子
  • YOLO免费数据集网站收集
  • 拼图小游戏
  • 卷积神经网络(CNN)天气识别
  • Linux进程间通信之匿名管道
  • 【PTA题目】6-19 使用函数输出指定范围内的Fibonacci数 分数 20
  • 运行ps显示msvcp140.dll丢失怎么恢复?msvcp140.dll快速解决的4个不同方法
  • Java多线程(3)
  • Java线程周期
  • map与set的封装
  • mac无法向移动硬盘拷贝文件怎么解决?不能读取移动硬盘文件怎么解决
  • 基于Netty实现的简单聊天服务组件
  • 视频封面:从视频中提取封面,轻松制作吸引人的视频
  • CICD 持续集成与持续交付——gitlab
  • Linux - 驱动开发 - RNG框架
  • qsort使用举例和qsort函数的模拟实现
  • AttributeError: module ‘gradio‘ has no attribute ‘ClearButton‘解决方案
  • Kafka 集群如何实现数据同步?
  • 一本了解生成式人工智能
  • git 相关指令总结(持续更新中......)
  • windows 安装 Oracle Database 19c
  • 【数据结构】图的存储结构(邻接矩阵)
  • kubernetes--Pod控制器详解
  • 九、Linux用户管理
  • springboot项目中没有识别到yml文件解决办法
  • [管理与领导-125]:一个IT人的思考:职场中、人际交往中,不要为他人的不良行为和言语买单,不要让自己的情绪被外界影响或掌控。
  • 【FPGA】IP核
  • 吾爱破解置顶的“太极”,太好用了吧!