clickhouse21.7.11.3 explain 查看执行计划

语法

EXPLAIN [SYNTAX | PLAN | PIPELINE] [setting = value, ...] SELECT ... [FORMAT ...]

参数解释:

  • SYNTAX:查看优化后的语句

  • PLAN:用于查看执行计划,默认值

    • description:打印计划中各个步骤的描述,默认开启,默认值1
    • actions:打印计划中各个步骤的详细信息,默认关闭,默认值0
  • PIPELINE:用于查看PIPELINE计划

PLAN 例子

例子1

执行下面SQL:

explain select * from t_student_mt where age<23 and height <180 order by age

结果如下:

Expression (Projection)
  MergingSorted (Merge sorted streams for ORDER BY)  # 合并排序
    MergeSorting (Merge sorted blocks for ORDER BY)  # 合并排序
      PartialSorting (Sort each block for ORDER BY)  # 部分排序
        Expression (Before ORDER BY)
          Filter (WHERE)  # 过滤
            SettingQuotaAndLimits (Set limits and quota after reading from storage)
              ReadFromMergeTree  # 读数据

例子2

explain select avg(age) from t_student_mt where age<23 and height <180

结果如下:

Expression ((Projection + Before ORDER BY))
  Aggregating  # 执行聚合
    Expression (Before GROUP BY)
      Filter (WHERE)  # 过滤
        SettingQuotaAndLimits (Set limits and quota after reading from storage)
          ReadFromMergeTree

查看更详细的信息

explain actions = 1 select avg(age) from t_student_mt

结果如下:

Expression ((Projection + Before ORDER BY))
Actions: INPUT :: 0 -> avg(age) Float64 : 0
Positions: 0
  Aggregating
  Keys:
  Aggregates:
      avg(age)
        Function: avg(Int32) → Float64
        Arguments: age
        Argument positions: 0
    Expression (Before GROUP BY)
    Actions: INPUT :: 0 -> age Int32 : 0
    Positions: 0
      SettingQuotaAndLimits (Set limits and quota after reading from storage)
        ReadFromMergeTree
        ReadType: Default
        Parts: 3
        Granules: 3

SYNTAX 例子

查看优化后的语法:

explain SYNTAX select count(1) from t_student_mt

或

explain SYNTAX select count(*) from t_student_mt

执行结果如下:

SELECT count()
FROM t_student_mt

说明上面的 2个语句,优化成下面 SQL:

SELECT count() FROM t_student_mt

然后执行的

pipeline 例子

explain pipeline select avg(age) from t_student_mt where age<23 and height <180

执行结果:

(Expression)                           
ExpressionTransform                    
  (Aggregating)                        
  Resize 2 → 1                         
    AggregatingTransform × 2 # 说明2个线程在运行
      StrictResize 2 → 2               
        (Expression)                   
        ExpressionTransform × 2        
          (Filter)                     
          FilterTransform × 2          
            (SettingQuotaAndLimits)    
              (ReadFromMergeTree)      
              MergeTreeThread × 2 0 → 1

如果虚拟机使用 双核 或 双CPU,可以看到上面效果

参考:
https://blog.csdn.net/qq_40378034/article/details/120473116


原文出处:/show_1IX3QpYg0U4M.html