zoukankan      html  css  js  c++  java
  • 【转】Oracle 执行计划(Explain Plan) 说明

    转自:http://blog.chinaunix.net/uid-21187846-id-3022916.html

          如果要分析某条SQL的性能问题,通常我们要先看SQL的执行计划,看看SQL的每一步执行是否存在问题。 如果一条SQL平时执行的好好的,却有一天突然性能很差,如果排除了系统资源和阻塞的原因,那么基本可以断定是执行计划出了问题。看懂执行计划也就成了SQL优化的先决条件。这里的SQL优化指的是SQL性能问题的定位,定位后就可以解决问题。

    查看执行计划的三种方法

    • 设置autotrace(非通用)

    序号

    命令

    解释

    1

    SET AUTOTRACE OFF

    此为默认值,即关闭Autotrace

    2

    SET AUTOTRACE ON EXPLAIN

    只显示执行计划

    3

    SET AUTOTRACE ON STATISTICS

     只显示执行的统计信息

    4

    SET AUTOTRACE ON

     包含2,3两项内容

    5

    SET AUTOTRACE TRACEONLY

     ON相似,但不显示语句的执行结果

    • 使用SQL
    EXPLAIN PLAN FOR sql语句;
    SELECT plan_table_output FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE'));
    或者select * from table(dbms_xplan.display);
    • 使用Toad,PL/SQL Developer工具

    Cardinality(基数)/ rows

    Cardinality值表示CBO预期从一个行源(row source)返回的记录数,这个行源可能是一个表,一个索引,也可能是一个子查询。 在Oracle 9i中的执行计划中,Cardinality缩写成Card。 在10g中,Card值被rows替换。

    Cardinality的值对于CBO做出正确的执行计划来说至关重要。 如果CBO获得的Cardinality值不够准确(通常是没有做分析或者分析数据过旧造成),在执行计划成本计算上就会出现偏差,从而导致CBO错误的制定出执行计划。

    对于多表查询,CBO使用每个关联表返回的行数(Cardinality)决定用什么样的访问方式来做表关联(如Nested loops Join 或 hash Join)。

    多表连接的三种方式详解 HASH JOIN /MERGE JOIN/ NESTED LOOP

    http://blog.csdn.net/tianlesoftware/archive/2010/08/20/5826546.aspx

    SQL 的执行计划

    Oracle SQL的硬解析和软解析

    http://blog.csdn.net/tianlesoftware/archive/2010/04/08/5458896.aspx

    示例:

    SQL> SET AUTOTRACE TRACEONLY; -- 只显示执行计划,不显示结果集

    SQL> select * from scott.emp a,scott.emp b where a.empno=b.mgr;

    image

    在Toad 里面,很清楚的显示了执行的顺序。 但是如果在SQLPLUS里面就不是那么直接。 但我们也可以判断:一般按缩进长度来判断,缩进最大的最先执行,如果有2行缩进一样,那么就先执行上面的

    字段解释:

    1. ID: 一个序号,但不是执行的先后顺序。执行的先后根据缩进来判断。
    2. Operation: 当前操作的内容。
    3. Rows: 当前操作的Cardinality,Oracle估计当前操作的返回结果集。
    4. Cost(CPU):Oracle 计算出来的一个数值(代价),用于说明SQL执行的代价。
  • 相关阅读:
    WIN32程序挂钩SetLastError,输出错误描述到控制台
    设置c#windows服务描述及允许服务与桌面交互的几种方法(作者博客还有一大堆C#创建服务的文章)
    VC内存溢出一例 –- 调用约定不一致 (_CRT_DEBUGGER_HOOK(_CRT_DEBUGGER_GSFAILURE)
    QtWaitingSpinner
    美国独立战争真相:英法全球争霸战之北美战场
    asp.net的ajax以及json
    HashTable和HashSet中的类型陷阱
    C语言的一些常见细节
    堆排序详解
    Core Animation编程指南
  • 原文地址:https://www.cnblogs.com/dorothychai/p/6233002.html
Copyright © 2011-2022 走看看