执行计划
📄字数 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:扫描操作使用的过滤条件。
