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执行的代价。
  • 相关阅读:
    HTML解决浏览器字体大小12px限制,实现自动适应大小
    Oracle 大最插入数据 一段时间之后变慢问题解决方法
    中间件使用-nginx 中ssl证书的设置
    asp.net core学习:准备asp.net core源码编译环境
    批量修改文件名后缀
    tcpdump 抓所有网卡的包
    mysql数据库备份
    x64架构下Linux系统函数调用
    博客背景美化——动态雪花飘落
    MySQL锁:03.InnoDB行锁
  • 原文地址:https://www.cnblogs.com/dorothychai/p/6233002.html
Copyright © 2011-2022 走看看