• 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语法优化

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

    4)查看PIPELINE

    1. EXPLAIN PIPELINE SELECT sum(number) FROM numbers_mt(100000GROUP BY number % 20;
    2. //打开其他参数
    3. EXPLAIN PIPELINE header=1,graph=1 SELECT sum(number) FROM numbers_mt(10000GROUP 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子句,减小查询返回的数据量。

  • 相关阅读:
    从一道题到贪心入门
    结构伪类选择器
    Spring Boot整合OAuth2实现GitHub第三方登录
    Brief. Bioinformatics2021 | sAMP-PFPDeep+:利用三种不同的序列编码和深度神经网络预测短抗菌肽
    遗传算法在机器人路径规划中的应用研究(Matlab代码实现)
    PyTorch :YOLOv5实战
    HK32_UID中获取芯片唯一ID相同的问题
    Doodles版洞洞鞋3天售罄 蓝筹NFT卖货自救
    【问题处理】WPS提示不能启动此对象的源应用程序如何处理?
    Destoon采集翻译伪原创发布工具
  • 原文地址:https://blog.csdn.net/shangjg03/article/details/134478423