1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 【Oracle】三种方式查看SQL语句的执行计划

【Oracle】三种方式查看SQL语句的执行计划

时间:2022-03-01 12:01:34

相关推荐

【Oracle】三种方式查看SQL语句的执行计划

查看执行计划的方式有三种:

EXPLAIN PLAN 、V$SQL_PLAN 、SQL*PLUS AUTOTRACE

1.EXPLAIN PLAN:

显示执行相应语句时可以使用的理论计划

读取执行计划:按缩进量读取,缩进越多,越先执行;缩进量相同,先上后下。

dbms_xplan 程序包里三种表函数

display (理论并未真正执行)

display_awr(真正执行)

display_cursor(查询内存中执行过的执行计划)

语法:

EXPLAIN PLANSET STATEMENT_ID = ' ' FOR要查看的SQL语句

输出:

SELECT PLAN_TABLE_OUTPUT FROM TABLE(DBMS_XPLAN.DISPLAY());

display函数中的参数:

table_name:指定计划表的名字,缺省值为‘PLAN_TABLE’。statement_id:SQL语句的ID号,是在生成执行计划时使用set statement_id

命令设置的值,默认值为NULL,当使用默认值时,将显示最近插入计划表中的执行计划。

format:用于控制display函数输出内容,其常用值有:

basic: 仅仅显示最少的信息。基本上包括操作和操作的对象

typical:显示大部分信息。基本上包括除了别名,提纲和字段投 影外的所有信息,此为缺省值。

serial: 类似于typical,但不显示并行操作

all: 显示除提纲之外的所有信息

advanced:显示所有信息

相匹配的额外修饰符有:(需要某个修饰符使用“+”,不需要使用“-”,连接之间要有空格)

alias:控制包含查询块与别名的显示部分bytes:控制执行计划表中字段bytes的显示cost:控制执行计划表中字段cost的显示note:控制包含注释信息的显示部分outline:控制包含提纲信息的显示部分parallel:控制包含并行处理信息的提示paration:控制并行处理信息的显示,尤其是执行计划表中字段TQ、IN-OUT、PQ Distrib的显示predicate:控制包含谓词filter和access显示部分peeked_binds:控制包含绑定变量窥探部分的显示。仅当生成执行计划时使用了绑定变量是可见projection:控制包含投影信息的显示部分remote:控制远程执行的SQL语句的显示rows: 控制执行计划表中字段rows的显示

例如:

EXPLAIN PLANSET STATEMENT_ID = '192' FORSELECT * FROM SCOTT.EMP;SELECT PLAN_TABLE_OUTPUT FROM TABLE(DBMS_XPLAN.DISPLAY());Plan hash value: 3956160932--------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time|--------------------------------------------------------------------------| 0 | SELECT STATEMENT || 14 | 1218 |3 (0)| 00:00:01 || 1 | TABLE ACCESS FULL| EMP | 14 | 1218 |3 (0)| 00:00:01 |--------------------------------------------------------------------------Note----- - dynamic sampling used for this statement (level=2)

2.v$sql_plan视图:

视图中包含一种方法,可以查询最近使用过的真正执行过的执行过的执行计划(VSQLPLANSTATISTICS提供了实际的执行统计信息,通过VSQL_PLAN_STATISTICS_ALL,可并列比较优化程序评估结果。)

语法:

SELECT PLAN_TABLE_OUTPUT FROMTABLE(DBMS_XPLAN.DISPLAY_CURSOR('cfzo0...'));

v$sql_plan查询结果中各列说明(部分):

HASH_BALUE:库高速缓存中父语句的散列值ADDRESS:此游标的父游标的句柄地址CHILD_NUMBER:使用此执行计划的子游标编号POSITION:具有相同的PARENT_ID的操作的处理顺序PARENT_ID:操作当前步骤的输出的下一执行步骤的IDID:执行计划中每个步骤所分配的编号

例如:

---在sys用户下执行了SQL语句:SELECT * FROM SCOTT.EMP;---通过SQL文本,在v$sql视图中查询SQL_ID:select sql_text,sql_id from v$sql where sql_text like'%SCOTT.EMP%';---得到SQL_ID:SELECT * FROM SCOTT.EMP 4ay6mhcbhvbf2---查看执行计划:SELECT PLAN_TABLE_OUTPUT FROMTABLE(DBMS_XPLAN.DISPLAY_CURSOR('4ay6mhcbhvbf2'));SELECT * FROM SCOTT.EMPPlan hash value: 3956160932--------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time|--------------------------------------------------------------------------| 0 | SELECT STATEMENT || | |3 (100)||| 1 | TABLE ACCESS FULL| EMP | 14 | 1218 |3 (0)| 00:00:01 |--------------------------------------------------------------------------Note------ dynamic sampling used for this statement (level=2)

3.sqlplus autotrace:

—输入set autot命令可查看语法:

SQL> set autot

Usage: SET AUTOT[RACE] {OFF | ON | TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]]

—说明

SET AUTOTRACE OFF 此为默认值,即关闭Autotrace

SET AUTOTRACE ON 同时输出执行结果以及统计信息和执行计划信息。

SET AUTOTRACE ON EXPLAIN 只打开执行计划报表,显示命令结果,不显示统计信息。

SET AUTOTRACE ON STATISTICS 只打开统计信息报表,显示命令结果,不显示执行计划。

SET AUTOTRACE TRACEONLY 不显示命令的执行结果,显示执行计划和统计信息。

SET AUTOTRACE TRACEONLY EXPLAIN 只显示执行计划信息。

SET AUTOTRACE TRACEONLY STATISTICS 只显示统计信息。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。