
# EXPLAIN
#### 功能描述
显示SQL语句的执行计划。
执行计划将显示SQL语句所引用的表采用的扫描方式。如果引用了多个表，执行计划还会显示使用的JOIN算法。
执行计划中最关键的部分是语句的预计执行开销，即计划生成器对执行该语句所需时间的预估。
如果指定了ANALYZE选项，则该语句会被执行，然后根据实际的运行结果显示统计数据，包括每个计划节点内时间总开销（毫秒为单位）和实际返回的总行数。这对于判断计划生成器是否接近现实非常有用。
#### 注意事项
在指定ANALYZE选项时，语句会被执行。
#### 语法格式
- 显示SQL语句的执行计划，支持多种选项，对选项顺序无要求：
  ```
  EXPLAIN [ (  option  [, ...] )  ] statement;
  ```
  其中选项option子句的语法为：
  ```
  ANALYZE [ boolean ] |
      ANALYSE [ boolean ] |
      VERBOSE [ boolean ] |
      COSTS [ boolean ] |
      CPU [ boolean ] |
      DETAIL [ boolean ] |
      NODES [ boolean ] |
      NUM_NODES [ boolean ] |
      BUFFERS [ boolean ] |
      TIMING [ boolean ] |
      PLAN [ boolean ] |
      FORMAT { TEXT | XML | JSON | YAML }
  ```
  
- 显示SQL语句的执行计划，且要按顺序给出选项：
  ```
  EXPLAIN  { [  { ANALYZE  | ANALYSE  }  ] [ VERBOSE  ]  | PERFORMANCE  } statement;
  ```
  
- 显示复现SQL语句的执行计划所需的信息，通常用于定位问题。STATS选项必须单独使用：
  ```
  EXPLAIN ( STATS [ boolean ] ) statement;
  ```
  
 
- 显示DDL语句执行步骤的详细耗时信息（该语法仅9.1.0及以上集群版本支持）：
  ```
  EXPLAIN PERFORMANCE statement;
  ```
  
  
#### 参数说明
- **statement**
  指定要分析的SQL语句。
  
- **ANALYZE boolean \| ANALYSE boolean**
  显示实际运行时间和其他统计数据。
  取值范围：
  - TRUE（缺省值）：显示实际运行时间和其他统计数据。
  
  - FALSE：不显示。
   
- **VERBOSE boolean**
  显示有关计划的额外信息。
  取值范围：
  - TRUE（缺省值）：显示额外信息。
  
  - FALSE：不显示。
   
- **COSTS boolean**
  包括每个规划节点的估计总成本，以及估计的行数和每行的宽度。
  取值范围：
  - TRUE（缺省值）：显示估计总成本和宽度。
  
  - FALSE：不显示。
   
- **CPU boolean**
  打印CPU的使用情况的信息。
  取值范围：
  - TRUE（缺省值）：显示CPU的使用情况。
  
  - FALSE：不显示。
   
- **DETAIL boolean**
  打印DN上的信息。
  取值范围：
  - TRUE（缺省值）：打印DN的信息。
  
  - FALSE：不打印。
   
- **NODES boolean**
  打印query执行的节点信息。
  取值范围：
  - TRUE（缺省值）：打印执行的节点的信息。
  
  - FALSE：不打印。
   
- **NUM_NODES boolean**
  打印执行中的节点的个数信息。
  取值范围：
  - TRUE（缺省值）：打印DN个数的信息。
  
  - FALSE：不打印。
   
- **BUFFERS boolean**
  包括缓冲区的使用情况的信息。
  取值范围：
  - TRUE：显示缓冲区的使用情况。
  
  - FALSE（缺省值）：不显示。
   
- **TIMING boolean**
  包括实际的启动时间和花费在输出节点上的时间信息。
  取值范围：
  - TRUE（缺省值）：显示启动时间和花费在输出节点上的时间信息。
  
  - FALSE：不显示。
   
- **PLAN**
  是否将执行计划存储在plan_table中。当该选项开启时，会将执行计划存储在PLAN_TABLE中，不打印到当前屏幕，因此该选项为on时，不能与其他选项同时使用。
  取值范围：
  - ON（缺省值）：将执行计划存储在plan_table中，不打印到当前屏幕。执行成功返回EXPLAIN SUCCESS。
  
  - OFF：不存储执行计划，将执行计划打印到当前屏幕。
   
- **FORMAT**
  指定输出格式。
  取值范围：TEXT，XML，JSON和YAML。
  默认值：TEXT
  
- **PERFORMANCE**
  使用此选项时，即打印执行中的所有相关信息。
  
- **STATS boolean**
  打印复现SQL语句的执行计划所需的信息，包括对象定义、统计信息、配置参数等，通常用于定位问题。
  取值范围：
  - TRUE（缺省值）：显示复现SQL语句的执行计划所需的信息。
  
  - FALSE：不显示。
   
 
#### 示例
显示表简单查询的执行计划：
```
EXPLAIN SELECT * FROM tpcds.customer_address_p1;
```
#### 相关链接
[ANALYZE \| ANALYSE](https://support.huaweicloud.com/devg-fabric/dataartsfabric_sql_04_0305.html)
