一、概述
- EXPLAIN在版本20.6.3正式启用。
- 官方CH服务器配置推荐:独占式服务器、120GB硬盘、100GB内存、32线程。
二、基础语法
EXPLAIN [AST | SYNTAX | PLAN | PIPELINE] [setting = value, ...]
SELECT ... [FORMAT ...]
- PLAN:用于查看执行计划,默认值。
1.1 header 打印计划中各个步骤的 head 说明,默认关闭,默认值 0;
1.2 description 打印计划中各个步骤的描述,默认开启,默认值 1;
1.3 actions 打印计划中各个步骤的详细信息,默认关闭,默认值 0。 - AST 用于查看语法树
- SYNTAX 用于优化语法
- PIPELINE 用于查看PIPELINE计划。
4.1 header 打印计划中各个步骤的head说明,默认关闭;
4.2 graph 用DOT图形语言描述管道图,默认关闭,需要查看相关的图形需要配合graphviz查看;
4.3 actions 如果开启了graph,紧凑打印打,默认开启。
注:PLAN和PIPELINE还可以进行额外的显示设置,如上参数所示。
三、实操
- PLAN
> explain plan select arrayJoin([1,2,3,null,null]);
image.png
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;
image.png
EXPLAIN header=1, actions=1,description=1 SELECT number from system.numbers limit 10;
- AST
EXPLAIN AST SELECT number from system.numbers limit 10;
image.png
- SYNTAX
//先做一次查询
SELECT number = 1 ? 'hello' : (number = 2 ? 'world' : 'atguigu') FROM numbers(10);
image.png
EXPLAIN SYNTAX SELECT number = 1 ? 'hello' : (number = 2 ? 'world' : 'atguigu') FROM numbers(10);
image.png
此时并未进行任何优化。
// 开启三元运算符优化
SET optimize_if_chain_to_multiif = 1;
再次执行语句。
image.png
- PIPELINE
EXPLAIN PIPELINE SELECT sum(number) FROM numbers_mt(100000) GROUP BY number % 20;
image.png
4.1 *8表示8个线程在执行。