【Oracle】三种方式查看SQL语句的执行计划
查看执行计划的方式有三种:
EXPLAIN PLAN 、V$SQL_PLAN 、SQL*PLUS AUTOTRACE
1.EXPLAIN PLAN:
显示执行相应语句时可以使用的理论计划
读取执行计划:按缩进量读取,缩进越多,越先执行;缩进量相同,先上后下。
dbms_xplan 程序包里三种表函数
display (理论并未真正执行)
display_awr(真正执行)
display_cursor(查询内存中执行过的执行计划)
语法:
EXPLAIN PLAN
SET 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 PLAN
SET STATEMENT_ID = '192' FOR
SELECT * 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 FROM
TABLE(DBMS_XPLAN.DISPLAY_CURSOR('cfzo0...'));
v$sql_plan查询结果中各列说明(部分):
- HASH_BALUE:库高速缓存中父语句的散列值
- ADDRESS:此游标的父游标的句柄地址
- CHILD_NUMBER:使用此执行计划的子游标编号
- POSITION:具有相同的PARENT_ID的操作的处理顺序
- PARENT_ID:操作当前步骤的输出的下一执行步骤的ID
- ID:执行计划中每个步骤所分配的编号
例如:
---在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 FROM
TABLE(DBMS_XPLAN.DISPLAY_CURSOR('4ay6mhcbhvbf2'));
SELECT * FROM SCOTT.EMP
Plan 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 只显示统计信息。
【Oracle】三种方式查看SQL语句的执行计划的更多相关文章
- oracle中查看sql语句的执行计划
1.在pl/sql中打开cmd命令容器 2.在cmd命令窗口中输入:explain plan for select * from t; 3.查看sql语句的执行计划:select * from tab ...
- 配置数据源的三种方式和sql心跳的配置
三种方式配置数据源连接池: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=" ...
- Hibernate 三种状态变化 与 sql 语句的关系
前言:在Hibernate中有三种状态,对它的深入理解,才能更好的理解hibernate的运行机理,刚开始不太注意这些概念,后来发现它是重要的.对于理解hibernate,JVM和sql的关系有更好的 ...
- day57-mysql-五种约束和sql语句逻辑执行顺序
二.sql语句逻辑执行顺序 () SELECT () DISTINCT <select_list> 去重复 () FROM <left_table> () <join_t ...
- 如何通过outline为SQL语句指定执行计划
创建测试表 以用户jyu连接,创建测试表 SQL> conn jyu/jyu; Connected. SQL> create table t (id number, name varcha ...
- SQL语句的执行计划(oracle表的三种链接方式)
SQL语句我们写完之后,就是分析其优化,这就要求我们了解到底数据是怎么存储. 首先我们需要了解,表链接的几种方式 nested loop join sort merge join hash join ...
- 查看sql 语句io执行情况
set statistics io,time on 表 'xx'.扫描计数 1,逻辑读取 19 次,物理读取 0 次,预读 0 次,lob 逻辑读取 76 次,lob 物理读取 0 次,lob 预读 ...
- MySQL通过Explain查看select语句的执行计划结果触发写操作
[背景] 某某同学执行了一下Explain结果结果发现数据库有了一条写入操作,恭喜这位同学你的锅到货了,你签收一下: 对! 你没有听错,在一种场景下就算是Explain也会引发数据的写操作,就这是外层 ...
- 【测试】使用hr用户下的employees表写一条SQL语句,执行计划走索引全扫描
SQL> select count(*) from employees; COUNT(*) ---------- Execution Plan ------------------------- ...
随机推荐
- 安装 Ubuntu 14.04 之后要做的一些事
转自: http://www.cnblogs.com/marcowei/p/3841342.html 安装 ubuntu14.04 之后要做的一些事 前言: 用 ubuntu14.04 也有一段时间 ...
- HashMap源码分析笔记(一)
一.结构 HashMap的结构由数组和链表组成,可以说是一个链表类型的数组: 快速定位方式:key值得hash变换作为数组索引快速找到对应数组块,之后通过hash值对比从链表中查找到匹配项. hash ...
- linux邮件服务
linux本地常见邮件服务有: Centos5:默认使用sendmail邮件服务,开启方式/etc/init.d/sedmail start Centos6:默认使用postfix邮件服务,开启方式/ ...
- 高举 Vue-SSR
将同一个组件渲染为服务器端的 HTML 字符串,将它们直接发送到浏览器,最后将静态标记"混合"为客户端上完全交互的应用程序. SSR的目的 To solve 首屏渲染问题 SEO问 ...
- List集合中把其中一个元素 调整到集合的第一位
要求:现在想把集合中的某个元素,放到该集合的第一个位置,但是其他元素的顺序不需要管. 方法:需要遍历集合,找到这个元素在集合中的位置,然后使用Collections.swap(list,o,i) (O ...
- String Boot-thymeleaf使用(四)
简介 Thymeleaf是面向Web和独立环境的现代服务器端Java模板引擎,能够处理HTML,XML,JavaScript,CSS甚至纯文本.,可以完全替代jsp,也是spring boot官方推荐 ...
- Spring事务的传播行为分析
前言 最近项目有涉及到Spring事务,所以工作之余,想认真了解学习下Spring事务,查阅了若干资料,做了一个demo(PS:参考了大牛的). 现分享总结如下: 1.Spring 事务的简介 理解事 ...
- 0809MySQL实战系列:大字段如何优化|数据存储结构
转自https://yq.aliyun.com/articles/59256?spm=5176.100239.blogcont59257.9.5MLR2d 摘要: 背景 线上发现一张表,1亿的数据量, ...
- POJ3614 Sunscreen 贪心入门
题目大意 给出一些区间和一些点,一个点如果在一个区间内,那么此两者可以匹配.问匹配数最大是多少. 题解 这样的题我们一般都是站在区间上去找与其配对的点.我们可以得到如下性质: 对于一段区间\([l_1 ...
- 怎样才是一个基本水平的java程序员?
怎样才是一个基本水平的java程序员? 熟悉常用的数据结构,包括数组,链表,树,哈希表等. 熟悉结构化编程和面向对象编程. 能够阅读UML设计图,根据UML语义进行编码 了解RDBMS和SQL的使用, ...