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执行的代价。
  • 相关阅读:
    NDOC中文支持及入门用法
    网页代码常用小技巧
    SOCKET通讯点滴
    自动备份程序目录
    MySql.Data.dll Microsoft.Web.UI.WebControls.dll下载
    c#:获取IE地址栏中的URL
    比较好的单例登录模式(参考网友)
    FreeTextBox使用详解
    2005自定义控件显示基准线
    连接字符串大全
  • 原文地址:https://www.cnblogs.com/dorothychai/p/6233002.html
Copyright © 2011-2022 走看看