zoukankan      html  css  js  c++  java
  • ClickHouse 高级(一)优化(1)Explain 查看执行计划

    0 Explain 查看执行计划

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

    2.1 新版本使用 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;
    2)AST 语法树
    EXPLAIN AST SELECT number from system.numbers limit 10;
    3)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;
    //再次查看语法优化
    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;
    2.2 老版本查看执行计划
    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 子句,减小查询返回的数据量。
     

    本文来自博客园,作者:秋华,转载请注明原文链接:https://www.cnblogs.com/qiu-hua/p/15113481.html

  • 相关阅读:
    ResGen.exe 生成resources文件方法 [转]
    C#【Winform】带参启动外部EXE
    SBO的5个开发原则机遇只给有准备的人[转]
    在SQL中插入临时表时使用自动增长的数据字段
    c# 强制退出
    C#实现SQL全库检索数据比较使用DataReader与DataAdapter+Datatable效率,差距惊人!
    推荐一个C#代码混淆器 .NET Reactor
    面向对象软件设计——设计模式学习
    AbstarctFactory模式——设计模式学习
    插入排序算法(直接,折半,希尔)
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/15113481.html
Copyright © 2011-2022 走看看