zoukankan      html  css  js  c++  java
  • 过sql_trace跟踪得到了该SQL的执行计划,如何看懂执行计划

    通过sql_trace跟踪得到了该SQL的执行计划,但不会看,请大家教我如何看懂执行计划
    下面是一条SQL的执行计划,能详细说说各个信息代表什么意思吗?

    这是执行的SQL语句,索引建立的是列ORDDATE + UNIT_PRICE的复合索引
    select /*+ index(ord ix_ord_odate_uprice) */  *
    from ord
    where unit_price in (2000, 3000, 5000)
    and orddate like '1997%'

    下面的是跟踪得到的执行计划,就是看不懂
    Call              Count             CPU Time                 Elapsed Time                Disk              Query            Current               Rows
    ------- ------ -------- ------------ ---------- ---------- ---------- ----------
    Parse              1                0.000                                  0.000                            0                    0                      0                          0                     
    Execute          1                0.000                                  0.000                            0                    0                      0                          0
    Fetch            481             0.047                                  0.059                            0                 1424                  0                        4800
    ------- ------ -------- ------------ ---------- ---------- ---------- ----------
    Total             483              0.047                                  0.059                            0                  1424                  0                       4800

    解释:
    Parse: 这步将SQL语句转换成执行计划,包括检查是否有正确的授权和所需要用到的表、列以及其他引用到的对象是否存在。 
    Execute: 这步是真正的由Oracle来执行语句。对于insert、update、delete操作,这步会修改数据,对于select操作,这步就只是确定选择的记录。
    Fetch: 返回查询语句中所获得的记录,这步只有select语句会被执行。
    COUNT: 这个语句被parse、execute、fetch的次数。

    CPU: 这个语句对于所有的parse、execute、fetch所消耗的cpu的时间,以秒为单位。
    ELAPSED: 这个语句所有消耗在parse、execute、fetch的总的时间。
    DISK: 从磁盘上的数据文件中物理读取的块的数量。一般来说更想知道的是正在从缓存中读取的数据而不是从磁盘上读取的数据。
    QUERY: 在一致性读模式下,所有parse、execute、fetch所获得的buffer的数量。 一致性模式的buffer是用于给一个长时间运行的事务提供一个一致性读的快照,缓存实际上在头部存储了状态。
    CURRENT: 在current模式下所获得的buffer的数量。一般在current模式下执行insert、update、delete操作都会获取buffer。在current模式下如果在高速缓存区发现有新的缓存足够给当前的事务使用,则这些buffer都会被读入了缓存区中。
    ROWS: 所有SQL语句返回的记录数目,但是不包括子查询中返回的记录数目。对于select语句,返回记录是在fetch这步,
    对于insert、update、delete操作,返回记录则是在execute这步。





    Elapsed Time for Client(sec.): 0.182
    Misses in library cache during parse: 0
    Optimizer goal: CHOOSE
    Parsing user: SQLT (ID=68)


    Rows Row Source Operation
    ------- ---------------------------------------------------
           0     STATEMENT
    4800     TABLE ACCESS BY INDEX ROWID ORD
    4800     INDEX RANGE SCAN IX_ORD_ODATE_UPRICE OF IX_ORD_ODATE_UPRICE (NONUNIQUE)
  • 相关阅读:
    面向对象(接口 ,多态)
    面向对象(继承,重写,this,super,抽象类)
    IO(字符流 字符缓冲流)
    ArrayList集合
    字符串常用API
    面向对象(类,封装,this,构造方法)
    不同类型问题代码训练
    java中的方法
    04慕课网《进击Node.js基础(一)》HTTP讲解
    《JavaScript设计模式与开发实践》——第3章 闭包和高阶函数
  • 原文地址:https://www.cnblogs.com/jazzka702/p/2680496.html
Copyright © 2011-2022 走看看