Oracle查看SQL执行计划,分析SQL性能

如何查看SQL执行计划

    使用 PL/SQL 查看,具体使用方法以下:sql

  • 新建 解释计划窗口 ,将 SQL 复制进去执行,便可显示执行计划。
    解释计划窗口数据库

  • 选中 SQL 语句,点击菜单 工具-解释计划 或 按快捷键 F5oracle

执行计划结果说明

表扫描

table access by index rowid

经过ROWID的表存取,一次I/O只能读取一个数据块。经过rowid读取表字段,rowid多是索引键值上的rowid工具

table access full

全表扫描,对全部表中记录进行扫描。表字段不涉及索引时每每采用这种方式,此时效率最低。oop

索引扫描

index unique scan

索引惟一扫描,若是表字段有 UNIQUEPRIMARY KEY 约束,Oracle实现索引惟一扫描,这种扫描方式条件比较极端,出现比较少。性能

index range scan

索引范围扫描,最多见的索引扫描方式。在非惟一索引上都使用索引范围扫描,具体以下:优化

  • 在惟一索引列上使用了如下圈定范围的操做符(> < <> >= <= between等)
  • 在组合索引上,只使用部分列进行查询,致使查询出多行
  • 对非惟一索引列上进行的任何查询
index full scan

索引全扫描,这种状况下,是查询的数据都属于索引字段,通常都含有排序操做。code

index fast full scan

索引快速扫描,若是查询的数据都属于索引字段,而且没有进行排序操做,那么是属于这种状况。条件比较极端,出现比较少。排序

index range scan

索引范围扫描,最多见的索引扫描方式。在非惟一索引上都使用索引范围扫描。索引

index range scan

索引范围扫描,最多见的索引扫描方式。在非惟一索引上都使用索引范围扫描。

表链接

排序合并链接(Sort Merge Join)
  • 对于非等值链接,这种链接方式的效率是比较高的。

  • 若是在关联的列上都有索引,效果更好。

  • 对于将2个较大的row source作链接,该链接方法比Nested Loops链接要好一些。

  • 可是若是sort merge返回的row source过大,则又会致使使用过多的rowid在表中查询数据时,数据库性能降低,由于过多的I/O.

嵌套循环(Nested Loops)
  • 若是driving row source(外部表)比较小,而且在inner row source(内部表)上有惟一索引,或有高选择性非惟一索引时,使用这种方法能够获得较好的效率。

  • NESTED LOOPS有其它链接方法没有的的一个优势是:能够先返回已经链接的行,而没必要等待全部的链接操做处理完才返回数据,这能够实现快速的响应时间。

哈希链接(Hash Join)
  • 这种方法是在oracle7后来引入的,使用了比较先进的链接理论,通常来讲,其效率应该好于其它2种链接,可是这种链接只能用在CBO优化器中,并且须要设置合适的hash_area_size参数,才能取得较好的性能。

  • 在2个较大的row source之间链接时会取得相对较好的效率,在一个row source较小时则能取得更好的效率。

  • 只能用于等值链接

相关文章
相关标签/搜索