Clickhouse 学习笔记(7)—— 查看执行计划

news2024/9/21 2:39:07

在 clickhouse 20.6 版本之前要查看 SQL 语句的执行计划需要设置日志级别为 trace 才能

可以看到,并且只能真正执行 sql,在执行日志里面查看

在20.6版本之后可以通过explain语句查看执行计划

基本语法

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

简单查询:

执行语句

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

复杂语句:

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;

该语句中涉及到聚合、过滤、分组、排序以及limit

其执行计划如下:

打开参数

EXPLAIN header=1, actions=1,description=1 select arrayJoin([1,2,3,null,null]);

结果如下:

与不加参数对比,描述更详细了些

AST 语法树

EXPLAIN AST select arrayJoin([1,2,3,null,null]);

SYNTAX 语法优化

以一个三元组查询为例:

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;

或者在查询语句后面加上settings optimize_if_chain_to_multiif = 1;表示在此次查询中暂时开启三元运算符优化

如何设置和查看参数值:

设置参数:set param=value;

查看参数:SHOW [CHANGED] SETTINGS LIKE|ILIKE <name>

  • changed 只显示和默认值不同的参数,也就是被改动过的(查看参数的变动情况)
  • LIKE 模糊匹配,区分大小写
  • ILIKE 模糊匹配,不区分大小写 insensitive like

参考:Clickhouse 设置和查看参数值set和show settings – 老紫竹的家

再次查询,结果如下:
可以看到,使用了一个multiIf函数来执行:

这样我们执行查询的时候就可以直接使用优化后的语句了;

multiif的用法:

Conditional Functions | ClickHouse Docs

PIPELINE

以一个有group by的语句为例:

EXPLAIN PIPELINE SELECT sum(number) FROM numbers_mt(100000) GROUP BY number % 20;

结果如下:

其中×4则代表着当前机器有4个CPU被使用(clickhouse默认使用的CPU是16,如果少于16则全部使用)

开启参数:

老版本查看执行计划

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1202790.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

构建Docker基础镜像(ubuntu20.04+python3.9.10+pytorch-gpu-cuda11.8)

文章目录 一、前置条件1.创建 ubuntu 镜像源文件【sources.list】2.下载 python 安装包【Python-3.9.10.tgz】 二、构建方法1.构建目录2.创建DockerFile3.打包镜像 一、前置条件 配置一下 ubuntu 的镜像源下载 python 安装包 1.创建 ubuntu 镜像源文件【sources.list】 内容…

粉够荣获淘宝联盟区域理事会常务理事,携手共铸淘客新生态

淘宝联盟区域理事会于2021年成立&#xff0c;首届成立成都、广州、武汉&#xff0c;服务近2000个领军淘宝客企业&#xff0c;作为区域生态与官方交流重要枢纽&#xff0c;理事会举办近百场交流分享会&#xff0c;带动淘客跨域跨业态交流成长。 2023年9月7日第二届淘宝联盟理事…

工作十年+的测试应该具备什么能力?

大概是2014年的时候&#xff0c;我开始接触面试工作&#xff0c;就是从应聘者转为面试官&#xff0c;记得印象深刻的是面试了一位做了8年的测试。对方气场很足&#xff0c;嗯&#xff0c;毕竟那时的我还只是一个3、4年经验的小测试&#xff0c;相反&#xff0c;印象深刻的并不是…

PO设计模式详解(Python+selenium+unittest)

一、什么是PO设计模式&#xff08;Page Object Model&#xff09; 1、Page Object是一种设计模式&#xff0c;它主要体现在对界面交互细节的封装上&#xff0c;使测试用例更专注于业务的操作&#xff0c;从而提高测试用例的可维护性。 2、一般PO设计模式有三层 第一层&#…

芯片设计工程师必备基本功——《设计与验证:Verilog HDL》

Verilog HDL 作为两大硬件描述语言之一&#xff0c;拥有很大的用户群。据调查&#xff0c;目前美国有 90%左右的 IC 设计人员使用 Verilog. 在中国&#xff0c;大概再 50% 左右的人在使用 Verilog 。 大量高校毕业生和部分软件设计人员正在不断涌入这个领域。要想尽快在 IC设计…

智能设备管理软件有什么用?如何让工厂设备维修管理更高效?

在当今这个数字化、智能化的时代&#xff0c;企业的生存与发展离不开高效、有序的管理。特别是在制造业中&#xff0c;设备报修与维修管理是关系到企业生产效益、安全和持续发展的关键环节。今天&#xff0c;我们就来聊聊如何通过智能化的设备管理软件&#xff0c;让工厂设备的…

Outlook无法显示阅读窗格

Outlook无法显示阅读窗格 故障现象 Outlook主界面不显示阅读窗格 故障截图 故障原因 阅读窗格被关闭 解决方案 1、打开Outlook - 视图 – 阅读窗格 2、选择“靠右”或者“底部”&#xff0c;正常显示阅读窗格

开发vue3 UI组件库,并且发布到NPM

目录 1.创建vue3工程 2.创建package文件 3.编写组件&#xff0c;并且导出 4.编写package.json 5.npm账号注册登录并发布 6.从npm安装使用 7.注意事项 1.创建vue3工程 &#xff08;1&#xff09;初始化Vue项目 cnpm create vite &#xff08;2&#xff09;进入文件夹…

【每日一题】307. 区域和检索 - 数组可修改-2023.11.13

题目&#xff1a; 307. 区域和检索 - 数组可修改 给你一个数组 nums &#xff0c;请你完成两类查询。 其中一类查询要求 更新 数组 nums 下标对应的值另一类查询要求返回数组 nums 中索引 left 和索引 right 之间&#xff08; 包含 &#xff09;的nums元素的 和 &#xff0c…

软件启动故障:msvcr100.dll丢失的解决方法,修复程序启动问题

在计算机技术日益发展的今天&#xff0c;我们经常会遇到各种各样的问题。其中&#xff0c;“msvcr100.dll是什么”这个问题&#xff0c;相信很多人都曾经遇到过。那么&#xff0c;msvcr100.dll究竟是什么呢&#xff1f;它又有什么作用呢&#xff1f;本文将从以下几个方面来探讨…

域名及网络地址

域名系统 可以通过 ping 命令查看域名对应的 IP 地址。 查看本机的默认 DNS 域名服务器地址可以使用 nslookup 命令。 IP地址和域名之间的转换 程序中有必要使用域名是很有必要的&#xff0c;系统随时可能会因为各种原因导致 IP 地址变更。而域名则比 IP 地址稳定得多&#…

力扣周赛371复盘(总结与进步)

比赛结果 第一题 2932. 找出强数对的最大异或值 I - 力扣&#xff08;LeetCode&#xff09; 这个由于是简单题&#xff0c;暴力for循环即可 通过结果如下&#xff1a; class Solution {public int maximumStrongPairXor(int[] nums) {int ans0;for(int i 0;i<nums.length;…

Minecraft开服教程:使用MCSM面板一键搭建我的世界服务器并实现远程联机

文章目录 前言1.Mcsmanager安装2.创建Minecraft服务器3.本地测试联机4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射内网端口 5.远程联机测试6. 配置固定远程联机端口地址6.1 保留一个固定TCP地址6.2 配置固定TCP地址 7. 使用固定公网地址远程联机 前言 MCSManager是一个…

微信开发者工具如何使用

首先是下载微信开发者工具 链接: https://pan.baidu.com/s/1ri-fRCUQsz9vLxbTqtdPUQ 提取码: 8rhn 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 安装完打开就是以下界面 接下来进入正题 第一步新建或导入 新建 获取AppID 第一步&#xff1a;通过微信公众平…

STM32GPIO——上拉、下拉电阻

如上两个图所示&#xff0c;标号2都为上拉、下拉电阻部分&#xff0c;阻值约为30k~50k欧&#xff0c;通过对应开关进行控制&#xff0c;开关由寄存器控制。 当引脚外部的器件没有干扰引脚的电压时&#xff0c;即没有外部的上、下拉电压&#xff0c;引脚的电平由引脚内部上、下…

Qt 线程串口

文章目录 ui设置创建线程函数初始串口run函数接收发送数据读取数据处理读取的数据写入数据写入启动的命令 主线程 ui设置 创建线程函数 #include <QObject> #include <QThread> #include <QSerialPort> #include <QSerialPortInfo>class SerialPort :…

电容隔离型±10V输入度隔离放大器:ISOC 124P

度模拟电压信号隔离器。50KHz (-3dB)高带宽与ISO 124P隔离器Pin-Pin兼容。ISOC 124P模拟电压信号隔离放大器是一种采用电容耦合隔离的混合集成电路&#xff0c;该放大器采用了全新的调制-解调电容耦合隔离技术。模块中信号以数字的形式通过电容隔离层进行传输&#xff0c;通过数…

【python自动化】Playwright基础教程(八)鼠标操作

【python自动化】Playwright基础教程(八)鼠标操作 本文目录 文章目录 【python自动化】Playwright基础教程(八)鼠标操作playwright系列回顾前文代码click模拟鼠标点击dblclick模拟鼠标双击down模拟鼠标按下move模拟鼠标移动up模拟鼠标释放wheel模拟鼠标滚动鼠标长按常用实战引…

Day02_《MySQL索引与性能优化》

文章目录 一、SQL执行顺序二、索引简介1、关于索引2、索引的类型Btree 索引Btree 索引 三、Explain简介四、Explain 详解1、id2、select_type3、table4、type5、possible_keys6、key7、key_len8、ref9、rows10、Extra11、小案例 五、索引优化1、单表索引优化2、两表索引优化3、…

react使用wx-open-launch-weapp的方法

index.html中加载 <script src"https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script> ios浏览器中,建议直接在app.js中触发 wx.config,其中openTagList写上wx-open-launch-weapp 因为微信需要根据网址计算签名,iosreact中会以根目录为有效网址 …