执行计划
📄字数 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代表右支,如BtIdxScan
与SeqScan
缩进相同,表示处于同一级执行步骤,右值小的先执行。cost
:当前算子的预估执行代价。result_num
:当前行执行后返回结果集的预估行数。table
:当前扫描器扫描的表的名称。index
:当前扫描器使用的索引的名称。join_filter
:连接操作使用的过滤条件。scan_filter
:扫描操作使用的过滤条件。