SQL查询语句的性能从一定程度上影响整个数据库的性能。很多情况下,数据库性能的低下差不多都是不良SQL语句所引起。而SQL语句的执行
计划则决定了SQL语句将会采用何种方式从数据库提取数据并返回给客户端,本文描述的将是如何通过EXPLAIN PLAN 获取SQL语句执行计划来获
取SQL语句的执行计划。
一、获取SQL语句执行计划的方式
1. 使用explain plan 将执行计划加载到表plan_table,然后查询该表来获取预估的执行计划
2. 查询动态性能视图v$sql_plan,v$sql_plan_statistics,v$sql_workarea 等来获取已缓存到库缓存中的真实执行计划
3. 查询自动工作量资料库(Automatic Workload Repository)或查询Statspack,即从资料库中获取执行计划
4. 启用执行计划跟踪功能,即autotrace功能
5. 使用PL/SQL Developer提供的获取执行计划方法
6. 使用Toad工具来获取执行计划
下面主要讨论使用explain plan获取执行计划的方法
二、explain plan工作实质、前提及操作方法
1. 工作实质
将SQL语句预估的执行计划加载到表plan_table,是对表plan_table 执行了DML操作,故不会执行隐式提交
可以对select,insert,update,merge,delete,create table, create index,alter index等加载执行计划到plan_table
2. 前提条件
需要先创建plan_table,创建方法:@?/rdbms/admin/utlxplan
对当前的SQL语句有执行权限以及对依赖的对象有相应操作的权限
3. 使用方法:
explain plan for select * from scott.emp where ename='SCOTT'; --未设置标记位
explain plan set statement_id='TEST' for select * from scott.emp where ename='SCOTT' --设置标记位为TEST
三、实战演习
1.环境
2.创建测试表演示获取执行计划
3.使用自顶向下的读取方法获取执行计划
上面的例子的读取方法:
执行4.1的索引唯一扫描
将4.1的结果集返回给3.1
执行3.2的全表扫描
将3.1和3.2步骤的结果集返回给2.1
执行2.1的嵌套循环
返回最终结果集
注意嵌套循环的查询方法
Oracle 从第一个行源中读取第一行,然后和第二个行源中的所有记录行进行比对,所有匹配的记录放在结果集中,然后Oracle 将读第一
个行源中的下一行。依次类推,直到第一行源中的所有行处理完毕。
4.使用构建树方式查看执行计划
查询结果中的order列与opt列
order
order列的指名了ID,父ID,以及执行计划中这一步骤的位置。
ID列标识了这个步骤,但并没有说明执行的顺序
父ID表明了这个步骤中的父步骤
位置信息说明了父ID相同的子操作的执行顺序
opt
说明当前优化器使用的模式
分析
首先会从步骤3开始执行,步骤3通过索引唯一扫描PK_EMP将得到的结果集返回给父步骤2
步骤2根据上一子步骤3得到的rowid访问表EMP并将结果集返回给父步骤1
对于步骤2检索到的每一行数据,步骤1会将deptno传递给步骤5
步骤5根据得到的deptno执行索引唯一扫描并将结果集返回给步骤4
步骤4根据步骤5得到的rowid 访问表dept,并将结果集返回给父步骤1
对于步骤3中剩余的行依次按上述方式将所有结果集返回给步骤1
步骤1将获得的最终结果集返回给步骤0,SQL完成查询
根据查询返回的结果来构建执行计划树
从ID为1的列开始,作为根节点
寻找所有父ID为1的所有子ID,如本例为2和4,将其纳入树中
分别寻找以2和4为父ID的所有子ID,将其纳入树中
如此循环直到所有的ID没有父ID
---------------
NESTED LOOP (1)
---------------
- -
- -
- -
--------- ----------
EMP (2) DEPT(4)
--------- ----------
- -
- -
--------- ----------
PK_EMP(3) PK_DEPT(5)
--------- ----------
5.通过Oracle 自带的SQL语句执行计划
可以通过Oracle提供的SQl语句来获得当前会话最后一条SQL语句的执行计划
utlxpls.sql -->用于查看串行执行计划
utlxplp.sql -->用于查看并行执行计划
四、总结:
1. explain plan并不执行当前的SQL语句,而是根据数据字典中记录的统计信息获取最佳的执行计划并加载到表plan_table。
2. 由于统计信息,执行环境的变化,explain plan与实际的执行计划可能会有差异。
3. 对于运行时将较长的SQL语句,不需要等到结果输出即可提前获得该SQL的执行计划,对于生产环境调试情况会减轻数据库负荷。
4. 注意set statement_id标识符区分大小写。
分享到:
相关推荐
本文档详细介绍了几种不同的方法来获取SQL语句的执行计划,包括使用autotrace、EXPLAIN PLAN以及DBMS_XPLAN.DISPLAY_CURSOR等。 #### 方法1:使用autotrace查看执行计划 **配置使用autotrace** 为了能够使用...
其次,对于查询一条 SQL 语句的执行计划,需要使用 EXPLAIN PLAN 命令,并指定 STATEMENT_ID,以区分是哪一条 SQL 语句的执行计划。 第三,使用 EXPLAIN PLAN 命令执行计划后,可以使用 SQL 语句来显示执行计划结果...
1. 使用EXPLAIN PLAN语句:在SQL查询前添加EXPLAIN PLAN FOR语句,然后执行查询,但不实际获取数据。这将把执行计划存储到一个名为“TABLE”或自定义的表中。 2. 观察执行计划:使用SELECT * FROM TABLE(ANALYZE ...
在不同的数据库系统中,如MySQL、Oracle、SQL Server等,都有相应的命令或工具用于查看SQL语句的执行计划,例如SQL Server的`SET SHOWPLAN_ALL`或`SET SHOWPLAN_TEXT`,Oracle的`EXPLAIN PLAN`。 4. **执行计划的...
- **EXPLAIN PLAN使用**:EXPLAIN PLAN是一个强大且常用的工具,用于展示SQL语句的执行计划。通过设置STATEMENT_ID,可以为SQL语句标识唯一的执行计划,便于后续比较和分析。在执行计划中,OPERATION字段描述了具体...
例如,在Oracle数据库中,可以使用`EXPLAIN PLAN`命令来生成执行计划,并通过`DBMS_XPLAN.DISPLAY`过程来查看这个计划。 #### 执行计划优化的关键因素 1. **索引使用**:合理地创建和使用索引可以极大提高查询效率...
### Oracle Explain Plan 总结 #### 一、Oracle 执行计划的重要性 在Oracle数据库中,为了提高查询效率和...无论是使用`EXPLAIN PLAN`还是`AUTOTRACE`,都能够帮助我们更好地理解SQL语句的执行流程,并据此进行优化。
Oracle 中的 explain_plan 是一个强大的分析工具,能够帮助用户了解 SQL 语句的执行计划,通过它可以了解 Oracle 是如何连接表、使用什么方式扫描表(索引扫描或全表扫描)以及使用到的索引名称。下面详细讲解 ...
1. 使用EXPLAIN PLAN分析执行计划,了解查询的执行路径,包括索引使用、表扫描方式、连接顺序等。 2. 调整SQL语句,比如避免全表扫描,利用索引,减少子查询,优化JOIN操作等。 3. 优化数据库参数,如加大SHARED_...
Explain Plan 是一个非常有用的工具,可以帮助我们查看 SQL 语句的执行计划,从而优化 SQL 语句的执行效率。使用 Explain Plan 需要创建 Explain_plan 表,并且需要进入相关应用表、视图和索引的所有者的帐户内。 ...
8. **使用EXPLAIN PLAN或类似的工具**:大多数数据库系统提供工具查看执行计划,如MySQL的EXPLAIN,Oracle的EXPLAIN PLAN,或SQL Server的SET SHOWPLAN_ALL。这些工具帮助我们理解执行过程并定位问题。 9. **参数化...
获取SQL执行计划通常可以通过设置SQL trace或使用`EXPLAIN PLAN`命令。在SQL*Plus中,`EXPLAIN PLAN FOR`命令可以预览执行计划,`SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);`则可以显示详细计划。 4. **分析执行...
### SQL语句的执行计划优化知识点详解 #### 一、性能调整综述 - **调整的重要性**: - Oracle数据库具备高度可调性,合理的调整能够显著提升性能。 - 调整不仅局限于数据库层面,还涉及到操作系统、硬件及软件...
在Oracle数据库系统中,"explain plan" 是一个关键的工具,用于分析和理解SQL查询的执行计划,也就是数据检索的路径。它可以帮助数据库管理员和开发人员优化查询性能,确保数据库高效运行。以下是对"explain plan ...
可以通过在SQL语句后添加`EXPLAIN PLAN FOR`来预览执行计划,然后使用`SELECT * FROM TABLE(dbms_xplan.display);`来显示。或者使用`SET AUTOTRACE`来开启自动跟踪,执行SQL后会显示执行计划和性能统计。 4. **...
`EXPLAIN PLAN`是一个SQL语句,它并不实际执行查询,而是解释和显示查询执行的逻辑步骤。这些步骤包括表扫描、索引访问、连接操作、排序和并行处理等。通过分析这些步骤,我们可以了解查询的执行效率,比如哪些部分...
1. 使用EXPLAIN PLAN语句:这是一种常用的方法,用户可以通过执行EXPLAIN PLAN语句,然后查询输出表来获取SQL语句的执行计划。例如,使用EXPLAIN PLAN FOR SELECT语句后,可以查询PLAN_TABLE表来查看具体的执行计划...