Oracle PL/SQL高级编程(第七弹:性能优化:理解执行计划)

了解SQL执行计划并进行性能的调优非常的复杂,是一个需要专门研究的话题,这里只是简单的介绍一下,不过过多阐述。

什么是执行计划

Oracle数据库系统中,为了回血SQL语句,可能需要实现多个步骤,比如从数据库中物理检索数据行,或者用某种方法准备数据行,这些步骤的组合就是执行计划。

整体上说,当执行一个SQL语句时,Oracle经过了以下4个步骤:
- 解析SQL语句:主要在共享池中查询相同的SQL语句,检查安全性和SQL语法与语义。
- 创建执行计划及执行:包括创建SQL语句的执行计划及对表数据的实际获取。
- 显示结果集:对字段数据执行所有必要的排序、转换和重新格式化。
- 转换字段数据:对已通过内置函数进行转换的字段进行重新格式化处理和转换。

查看执行计划

查看执行计划之前,需要先以DBA身份登录,执行utlxplan.sql脚本:@?rdbms/admin/utlxplan.sql
创建了表之后,在SQL*Plus中就可以使用SET AUTOTRACE来显示执行计划及统计信息:
- SET AUTOTRACE ON EXPLAIN:执行SQL,且仅显示执行计划。
- SET AUTOTRACE ON STATISTICS:执行SQL,且仅显示执行统计信息。
- SET AUTOTRACE ON:执行SQL,且显示执行计划及统计信息。
- SET AUTOTRACE TRACEONLY:仅显示执行计划及统计信息,无执行结果。
- SET AUTOTRACE OFF:关闭跟踪显示计划与统计。

比如要执行SQL且显示执行计划:

SET AUTOTRACE ON EXPLAIN;

SELECT * FROM emp WHERE empno = 1;

PL/SQL Developer提供了图形化的执行计划显示,提供了一个执行计划窗口,在该窗口中输入SQL查询语句后,按F8键就可以显示执行计划,或者直接在SQL窗口中F5键也可以。

理解执行计划

由于Oracle的执行计划涉及的内容很多,要理解执行计划,需要从Oracle的优化器方面开始,这就很复杂了,需要非常多的基础知识。所以通常我们比较多的会关注SQL语句执行时的表访问方式,这些访问方式会以不同的方式来获取数据表记录,而这些不同的数据访问方式在不同的场景下会严重影响执行的性能。这几种不同的访问方式如下:
- 全表扫描(FULL TABLE SCAN):这种方式会读取表中的每一条记录,顺序地读取每一个数据块直到结尾标识,对于一个大的数据表来说,使用全表扫描会降低性能,但有些时候,比如查询的结果占全表的数据量的比例比较高时,全表扫描相对于索引扫描优势一种较好的办法。
- 通过ROWID值获取(TABLE ACCESS BY ROWID):行的ROWID指出了该行所在的数据文件、数据块及行在该块中的位置,所以通过ROWID来存取数据可以快速定位到目标数据上,是Oracle存取单行数据的最快方法。
- 索引扫描(INDEX SCAN):先通过索引找到对应的ROWID值,然后通过ROWID值直接从表中找到具体的数据,能大大提高查找的效率。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值