1、查看执行计划的方法有多种,依次以下:sql
一、打开熟悉的查看工具:PL/SQL Developer。 ide
在PL/SQL Developer中写好一段SQL代码后,按F5,PL/SQL Developer会自动打开执行计划窗口,显示该SQL的执行计划。工具
二、explain plan for命令性能
在sql*plus或者PL/SQL Developer打开的command window中,执行以下命令:测试
1)explain plan for select * from dual; +回车优化
2)select * from table(dbms_xplan.display); +回车spa
2、使用执行计划进行SQL调优blog
一、 查看总COST,得到资源耗费的整体印象 排序
通常而言,执行计划第一行所对应的COST(即成本耗费)值,反应了运行这段SQL的整体估计成本,单看这个总成本没有实际意义,但能够拿它与相同逻辑不一样执行计划的SQL的整体COST进行比较,一般COST低的执行计划要好一些。索引
二、 按照从左至右,从上至下的方法,了解执行计划的执行步骤
执行计划按照层次逐步缩进,从左至右看,缩进最多的那一步,最早执行,若是缩进量相同,则按照从上而下的方法判断执行顺序,可粗略认为上面的步骤优先执行。每个执行步骤都有对应的COST,可从单步COST的高低,以及单步的估计结果集(对应ROWS/基数),来分析表的访问方式,链接顺序以及链接方式是否合理。
三、 分析表的访问方式
表的访问方式主要是两种:全表扫描(TABLE ACCESS FULL)和索引扫描(INDEX SCAN),若是表上存在选择性很好的索引,却走了全表扫描,并且是大表的全表扫描,就说明表的访问方式可能存在问题;若大表上没有合适的索引而走了全表扫描,就须要分析可否创建索引,或者是否能选择更合适的表链接方式和链接顺序以提升效率。
四、 分析表的链接方式和链接顺序
表的链接顺序:就是以哪张表做为驱动表来链接其余表的前后访问顺序。
表的链接方式:简单来说,就是两个表得到知足条件的数据时的链接过程。主要有三种表链接方式,嵌套循环(NESTED LOOPS)、哈希链接(HASH JOIN)和排序-合并链接(SORT MERGE JOIN)。
咱们常见得是嵌套循环和哈希链接。
嵌套循环:最适用也是最简单的链接方式。相似于用两层循环处理两个游标,外层游标称做驱动表,Oracle检索驱动表的数据,一条一条的代入内层游标,查找知足WHERE条件的全部数据,所以内层游标表中可用索引的选择性越好,嵌套循环链接的性能就越高。
哈希链接:先将驱动表的数据按照条件字段以散列的方式放入内存,而后在内存中匹配知足条件的行。哈希链接须要有合适的内存,并且必须在CBO优化模式下,链接两表的WHERE条件有等号的状况下才可使用。哈希链接在表的数据量较大,表中没有合适的索引可用时比嵌套循环的效率要高。
总结:
一、这里看到的执行计划,只是SQL运行前可能的执行方式,实际运行时可能由于软硬件环境的不一样,而有所改变,并且cost高的执行计划,不必定在实际运行起来,速度就必定差,咱们平时须要结合执行计划,和实际测试的运行时间,来肯定一个执行计划的好坏。
二、对于表的链接顺序,多数状况下使用的是嵌套循环,尤为是在索引可用性好的状况下,使用嵌套循环式最好的,但当ORACLE发现须要访问的数据表较大,索引的成本较高或者没有合适的索引可用时,会考虑使用哈希链接,以提升效率。排序合并链接的性能最差,但在存在排序需求,或者存在非等值链接没法使用哈希链接的状况下,排序合并的效率,也可能比哈希链接或嵌套循环要好。