一段SQL代码写好以后,可以通过查看SQL的执行计划,初步预测该SQL在运行时的性能好坏,尤其是在发现某个SQL语句的效率较差时,我们可以通过查看执行计划,分析出该SQL代码的问题所在。

那么,作为开发人员,怎么样比较简单的利用执行计划评估SQL语句的性能呢?总结如下步骤供大家参考:

1、 打开熟悉的查看工具:PL/SQL Developer。

在PL/SQL Developer中写好一段SQL代码后,按F5,PL/SQL Developer会自动打开执行计划窗口,显示该SQL的执行计划。

2、 查看总COST,获得资源耗费的总体印象

一般而言,执行计划第一行所对应的COST(即成本耗费)值,反应了运行这段SQL的总体估计成本,单看这个总成本没有实际意义,但可以拿它与相同逻辑不同执行计划的SQL的总体COST进行比较,通常COST低的执行计划要好一些。

3、 按照从左至右,从上至下的方法,了解执行计划的执行步骤

执行计划按照层次逐步缩进,从左至右看,缩进最多的那一步,最先执行,如果缩进量相同,则按照从上而下的方法判断执行顺序,可粗略认为上面的步骤优先执行。每一个执行步骤都有对应的COST,可从单步COST的高低,以及单步的估计结果集(对应ROWS/基数),来分析表的访问方式,连接顺序以及连接方式是否合理。

4、 分析表的访问方式

表的访问方式主要是两种:全表扫描(TABLE ACCESS FULL)和索引扫描(INDEX SCAN),如果表上存在选择性很好的索引,却走了全表扫描,而且是大表的全表扫描,就说明表的访问方式可能存在问题;若大表上没有合适的索引而走了全表扫描,就需要分析能否建立索引,或者是否能选择更合适的表连接方式和连接顺序以提高效率。

5、 分析表的连接方式和连接顺序

表的连接顺序:就是以哪张表作为驱动表来连接其他表的先后访问顺序。

表的连接方式:简单来讲,就是两个表获得满足条件的数据时的连接过程。主要有三种表连接方式,嵌套循环(NESTED LOOPS)、哈希连接(HASH JOIN)和排序-合并连接(SORT MERGE JOIN)。

我们常见得是嵌套循环和哈希连接。

嵌套循环:最适用也是最简单的连接方式。类似于用两层循环处理两个游标,外层游标称作驱动表,Oracle检索驱动表的数据,一条一条的代入内层游标,查找满足WHERE条件的所有数据,因此内层游标表中可用索引的选择性越好,嵌套循环连接的性能就越高。

哈希连接:先将驱动表的数据按照条件字段以散列的方式放入内存,然后在内存中匹配满足条件的行。哈希连接需要有合适的内存,而且必须在CBO优化模式下,连接两表的WHERE条件有等号的情况下才可以使用。哈希连接在表的数据量较大,表中没有合适的索引可用时比嵌套循环的效率要高。

总结两点:

1、这里看到的执行计划,只是SQL运行前可能的执行方式,实际运行时可能因为软硬件环境的不同,而有所改变,而且cost高的执行计划,不一定在实际运行起来,速度就一定差,我们平时需要结合执行计划,和实际测试的运行时间,来确定一个执行计划的好坏。

2、对于表的连接顺序,多数情况下使用的是嵌套循环,尤其是在索引可用性好的情况下,使用嵌套循环式最好的,但当ORACLE发现需要访问的数据表较大,索引的成本较高或者没有合适的索引可用时,会考虑使用哈希连接,以提高效率。排序合并连接的性能最差,但在存在排序需求,或者存在非等值连接无法使用哈希连接的情况下,排序合并的效率,也可能比哈希连接或嵌套循环要好。

oracle 执行计划(F5)详解相关推荐

  1. SQL Server 聚集索引 clustered index 非聚集索引Nonclustered Indexes键查找查找Key Lookup执行计划过程详解

    SQL Server 聚集索引非聚集索引键查找过程详解 索引的相关术语 1 堆(Heap)是一种没有指定排序的数据结构,通俗的理解堆就像是按照顺序排放的杂物.在数据库里也即是对应没有聚集索引. 2 聚 ...

  2. 【MySQL附录】A4:MySQL中执行计划explain详解

    MySql使用explain关键字可以模拟优化器执行sql语句,我们就能够知道MySql会如何处理咱们的sql, 可以根据explain的分析结果和MySql底层数据结构优化sql.文章内容基于MyS ...

  3. mysql中的执行计划_MySQL中的执行计划explain详解

    一.用法及定义: explain为sql的执行计划.在sql前面加上explain关键字即可 如:explain select * from tbl_emp; 名词解释: id:[操作表的顺序] 1. ...

  4. SQL Server 堆heap 非聚集索引 Nonclustered index 行号键查找RID loopup结合执行计划过程详解

    SQL Server 堆型数据与执行计划使用案例 索引的相关术语 1 堆(Heap)是一种没有指定排序的数据结构,通俗的理解堆就像是按照顺序排放的杂物.在数据库里也即是对应没有聚集索引. 2 聚集索引 ...

  5. mysql执行计划explain介绍_Mysql执行计划EXPLAIN详解

    分析查询性能时,考虑EXPLAIN关键字同样很管用.EXPLAIN关键字一般放在SELECT查询语句的前面,用于描述MySQL如何执行查询操作.以及MySQL成功返回结果集需要执行的行数.explai ...

  6. Explain执行计划key_len详解

    我们在使用Explain查看SQL执行计划时,其中有一列为key_ken EXPLAIN select * FROM user WHERE id = 1; key_len表示使用的索引长度,key_l ...

  7. MySQL执行计划EXPLAIN详解

    说明 该文章针对InnoDB存储引擎B树索引的优化,前提要对B树索引有一定的理解. 查询SQL执行加载顺序 这是我们写SQL的流程: SELECT a.`name` FROM a LEFT JOIN ...

  8. mysql查看执行计划任务_学习计划 mysql explain执行计划任务详解

    我们在之前已经找到了需要优化的SQL,但是怎么知道它的那些方面需要优化呢? explain就是为了这个使用的. explain显示了 mysql 如何使用索引来处理select语句以及连接表.可以帮助 ...

  9. mysql 执行计划 extra 详解

    文章目录 前言 using where using index using filesort no matching row in const table Using temporary Using ...

最新文章

  1. Activity的三层设计
  2. TEE综述:植物—土壤反馈(PSF):自然和农业科学间的桥梁
  3. 《程序员的思维修炼》思维导图
  4. uniapp使用iconfont字体图标
  5. 计算机能够进行逻辑操作的部件是,第二章 计算机逻辑部件
  6. vc2017 c语言运行,vc++2017下载|vc++2017运行库 32位64位 官方版 - 软件下载 - 绿茶软件园|33LC.com...
  7. linux 脚本加密工具下载,linux truecrypt 加密工具
  8. 2022-2027年中国非人寿保险市场竞争态势及行业投资前景预测报告
  9. dw 用html修改文字样式,Dreamweaver中插入文本以及文本格式设置方法?
  10. php第三方支付宝支付,第三方对接-支付宝支付接入教程
  11. c语言两个字母如何比较,c如何比较两个字符 C语言中怎么判断两个字符相同
  12. 东方国信(实习一面)
  13. windows11 第三方 截图工具对比
  14. 解决模拟器方向键无法使用问题
  15. 微信小程序:会议OA项目-首页
  16. 怎样播放swf文件 swf格式怎么转换成mp3格式
  17. PyGmae:有限状态机实践(五)
  18. 趣题:奇怪的自然数集划分
  19. php制作明信片,photoshop简单制作一张明信片
  20. LOJ#3054. 「HNOI 2019」鱼

热门文章

  1. JAVA汉字拼音解析
  2. ecef与enu的转换
  3. 《Microsoft SQL Server入门教程》第03篇 示例数据库和示例表
  4. 利用跨模态 Transformer 进行多模态信息融合
  5. Mysql 全外连接的实现
  6. 递归、迭代和分治(1):递归
  7. 嵌入式系统开发常用词汇
  8. if单选,双选,多选及switch多选择结构
  9. MATLAB——根轨迹原理及其Matlab绘制
  10. RateLimiter高并发访问限流