Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


执行计划

📄字数 1.4K
👁️阅读量 加载中...

一、功能描述

数据库支持通过EXPLAIN关键词来查看查询语句的执行计划,用户可根据输出的执行计划来进行SQL语句性能瓶颈分析,并进行针对性优化。

二、语法格式

(SelectStmt::=, UpdateStmt::=, InsertStmt::=, DeleteStmt::=, MergeIntoStmt::=)

三、参数解释

  • VERBOSE:可选关键词,指定后输出更详细的执行计划。
  • dml_stmt:要查看执行计划的数据操作语句,如每一步操作的扫描类型、过滤条件。
  • parallel_opt:DML语句执行并发数,请参阅select_with_parens中此参数说明。
  • opt_wait:DML语句执行等待超时时间,请参阅select_with_parens中此参数说明。
  • dml_opt:DML语句事务控制选项,所有关键字均表示不记录回滚日志。

四、示例与解读

sql
SQL> CREATE TABLE tab_hint_1(id INT,name VARCHAR(20));
SQL> CREATE TABLE tab_hint_2(id INT,name VARCHAR(20));
SQL> CREATE INDEX idx_hint ON tab_hint_1(id);
SQL> CREATE INDEX idx_hint ON tab_hint_2(id);

SQL> EXPLAIN VERBOSE SELECT /*+INDEX(a idx_hint)*/count(*) FROM tab_hint_1 a INNER JOIN tab_hint_2 b ON a.id=b.id WHERE a.id=3 GROUP BY a.name ORDER BY a.name LIMIT 10;
+--------------------------------------------------------------------------------------+
|                                      plan_path                                       |
+--------------------------------------------------------------------------------------+
| 1   LimitScan[(9 1) cost=0,result_num=1]                                            +|
| 2     Sort[(7 1) cost=0,result_num=1]                                               +|
| 3       HashGroup[(5 1) cost=0,result_num=1]                                        +|
| 4         IndexJoin[(4 1) cost=210,result_num=2]                                    +|
| 5           BtIdxScan[(2 1) cost=300,result_num=1](table=TAB_HINT_1)(index=IDX_HINT)+|
| 6           SeqScan[(1 2) cost=0,result_num=1](table=TAB_HINT_2)                    +|
| -----------------------Tips--------------------------                               +|
| 4   join_filter: (TAB_HINT_1.ID)=(TAB_HINT_2.ID)                                    +|
| 5   scan_filter: (TAB_HINT_1.ID)=(3)                                                +|
| 6   scan_filter: (TAB_HINT_2.ID)=(3)                                                +|
|                                                                                     +|
|                                                                                      |
+--------------------------------------------------------------------------------------+
  • 最左侧序号:表示执行计划树的层级,Tips中则是对应层级包含的过滤条件。
  • LimitScan:算子类型,限制结果行数的扫描器。
  • Sort:算子类型,排序扫描器。
  • HashGroup:算子类型,哈希分组扫描器。
  • IndexJoin:算子类型,索引连接扫描器。
  • BtIdxScan:算子类型,B树索引扫描器。
  • SeqScan:算子类型,顺序扫描器。
  • [(9 1) cost=0,result_num=1]:方括号里圆括号内左值为执行步骤序号,右值1代表左支,2代表右支,如BtIdxScanSeqScan缩进相同,表示处于同一级执行步骤,右值小的先执行。
  • cost:当前算子的预估执行代价。
  • result_num:当前行执行后返回结果集的预估行数。
  • table:当前扫描器扫描的表的名称。
  • index:当前扫描器使用的索引的名称。
  • join_filter:连接操作使用的过滤条件。
  • scan_filter:扫描操作使用的过滤条件。