ORACLE数据库查看执行计划的方法

本文介绍Oracle数据库中SQL执行计划的概念及查看方法,包括通过PL/SQL、SQL*PLUS及SQL_TRACE等方式获取执行计划,并详细解释了如何理解这些执行计划。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于ORACLE的应用系统很多性能问题,是由应用系统SQL性能低劣引起的,所以,SQL的性能优化很重要,分析与优化SQL的性能我们一般通过查看该SQL的执行计划,本文就如何看懂执行计划,以及如何通过分析执行计划对SQL进行优化做相应说明


一、什么是执行计划(explain plan) 


执行计划:一条查询语句在ORACLE中的执行过程或访问路径的描述。 

二、如何查看执行计划 

1: 在PL/SQL下按F5查看执行计划。第三方工具toad等。 

很多人以为PL/SQL的执行计划只能看到基数、优化器、耗费等基本信息,其实这个可以在PL/SQL工具里面设置的。可以看到很多其它信息,如下所示 

clip_image002

2: 在SQL*PLUS(PL/SQL的命令窗口和SQL窗口均可)下执行下面步骤 

复制代码代码如下:

SQL>EXPLAIN PLAN FOR 
SELECT * FROM SCOTT.EMP; --要解析的SQL脚本 
SQL>SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY); 

clip_image004

clip_image006

3: 在SQL*PLUS下(有些命令在PL/SQL下无效)执行如下命令: 

复制代码代码如下:

SQL>SET TIMING ON             --控制显示执行时间统计数据 
SQL>SET AUTOTRACE ON EXPLAIN       --这样设置包含执行计划、脚本数据输出,没有统计信息 
SQL>执行需要查看执行计划的SQL语句 
SQL>SET AUTOTRACE OFF           --不生成AUTOTRACE报告,这是缺省模式 
SQL> SET AUTOTRACE ON           --这样设置包含执行计划、统计信息、以及脚本数据输出 
SQL>执行需要查看执行计划的SQL语句 
SQL>SET AUTOTRACE OFF 
SQL> SET AUTOTRACE TRACEONLY      --这样设置会有执行计划、统计信息,不会有脚本数据输出 
SQL>执行需要查看执行计划的SQL语句 
SQL>SET AUTOTRACE TRACEONLY STAT --这样设置只包含有统计信息 
SQL>执行需要查看执行计划的SQL语句 

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

参考文档:SQLPlus User's Guide and Reference Release 11.1

clip_image008

注意:PL/SQL Developer 工具并不完全支持所有的SQL*Plus命令,像SET AUTOTRACE ON 就如此,在PL/SQL Developer工具下执行此命令会报错

SQL> SET AUTOTRACE ON;

Cannot SET AUTOTRACE

4:SQL_TRACE可以作为参数在全局启用,也可以通过命令形式在具体SESSION启用

4.1 在全局启用,在参数文件(pfile/spfile)中指定SQL_TRACE =true,在全局启用SQL_TRACE时会导致所有进程活动被跟踪,包括后台进程以及用户进程,通常会导致比较严重的性能问题,所以在生产环境要谨慎使用。

提示:通过在全局启用SQL_TRACE, 我们可以跟踪到所有后台进程的活动,很多在文档中的抽象说明,通过跟踪文件的实时变化,我们可以清晰的看到各个进程间的紧密协调。

4.2在当前SESSION级别设置,通过跟踪当前进程可以发现当前操作的后台数据库递归活动(这在研究数据库新特性时尤其有效),研究SQL执行时,发现后台

错误等。

复制代码代码如下:

SQL> ALTER SESSION SET SQL_TRACE=TRUE; 
SQL> SELECT * FROM SCOTT.EMP; 
SQL> ALTER SESSION SET SQL_TRACE =FALSE; 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值