zoukankan      html  css  js  c++  java
  • Oracle查看SQL执行计划,分析SQL性能

    如何查看SQL执行计划

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

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

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

    执行计划结果说明

    表扫描

    table access by index rowid

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

    table access full

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

    索引扫描

    index unique scan

    索引唯一扫描,如果表字段有 UNIQUEPRIMARY KEY 约束,Oracle实现索引唯一扫描,这种扫描方式条件比较极端,出现比较少。

    index range scan

    索引范围扫描,最常见的索引扫描方式。在非唯一索引上都使用索引范围扫描,具体如下:

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

    索引全扫描,这种情况下,是查询的数据都属于索引字段,一般都含有排序操作。

    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较小时则能取得更好的效率。

    • 只能用于等值连接

  • 相关阅读:
    shell脚本中执行python脚本并接收其返回值的例子
    linux查找所有文件中某个字符串
    Shell脚本中单引号(‘)和双引号(“)的使用区别
    第一个shell脚本
    shell 比较符号
    source ~/.bash_profile是什么意思
    bash shell:获取当前脚本的绝对路径(pwd/readlink)
    poj 3307 Smart Sister 打表解因子生成数问题
    Python将JSON格式数据转换为SQL语句以便导入MySQL数据库
    UISegmentedControl的具体使用
  • 原文地址:https://www.cnblogs.com/zdmd/p/13114730.html
Copyright © 2011-2022 走看看