ClickHouse-尚硅谷(8. 高级-Explain 查看执行计划)学习笔记

Posted yuan_404

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ClickHouse-尚硅谷(8. 高级-Explain 查看执行计划)学习笔记相关的知识,希望对你有一定的参考价值。

上一篇:(7. 入门-分片集群)

下一篇:(9. 高级-建表优化)学习笔记

文章目录

  在 clickhouse 20.6 版本之前要查看 SQL 语句的执行计划需要设置日志级别为 trace 才能可以看到,并且只能真正执行 sql,在执行日志里面查看。在 20.6 版本引入了原生的执行计划的语法。在 20.6.3 版本成为正式版本的功能。
  本文档基于目前较新稳定版 21.7.3.14。
  目前官网最新的在线测试链接https://play.clickhouse.com/play?user=play

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 案例实操

2.1 查看 PLAIN

  1. 简单查询

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

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

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

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

2.2 AST 语法树

EXPLAIN AST SELECT number from system.numbers limit 10;

2.3 SYNTAX 语法优化

  1. 先做一次查询

    SELECT number = 1 ? 'hello' : (number = 2 ? 'world' : 'atguigu') FROM system.numbers limit 10;
    

  2. 查看语法优化

    EXPLAIN SYNTAX SELECT number = 1 ? 'hello' : (number = 2 ? 'world' : 'atguigu') FROM  system.numbers limit 10;
    

  3. 开启三元运算符优化

    SET optimize_if_chain_to_multiif = 1;
    
  4. 再次查看语法优化

    EXPLAIN SYNTAX SELECT number = 1 ? 'hello' : (number = 2 ? 'world' :  'atguigu') FROM numbers(10);
    
  5. 返回优化后的语句

    SELECT multiIf(number = 1, \\'hello\\', number = 2, \\'world\\', \\'xyz\\')
    FROM numbers(10)
    

2.4 查看 PIPELINE

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

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

以上是关于ClickHouse-尚硅谷(8. 高级-Explain 查看执行计划)学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

ClickHouse-尚硅谷(8. 高级-Explain 查看执行计划)学习笔记

ClickHouse-尚硅谷(9. 高级-建表优化)学习笔记

ClickHouse-尚硅谷(9. 高级-建表优化)学习笔记

ClickHouse-尚硅谷(9. 高级-建表优化)学习笔记

ClickHouse-尚硅谷(15. 高级-常见问题排查)学习笔记

ClickHouse-尚硅谷(13. 高级-物化视图)学习笔记