ITPub博客

首页 > 数据库 > Oracle > 12.执行计划

12.执行计划

原创 Oracle 作者:zuiai510416 时间:2014-02-11 20:00:02 0 删除 编辑
执行计划
--sqlplus中
Set autotrace 
用法 Set autot[Trace]{Off|On|Trace[Only]}[EXP[LAIN]][STAT[ISTICS]]
show autotrace  --查看状态
Set autot On
Set linesize 200
Select * From tt;
/*----省略查询结果------------
执行计划
----------------------------------------------------------
Plan hash value: 264906180


--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |     1 |  2036 |     2   (0)| 00:00:01 |
|   1 |  TABLE ACCESS FULL| TT   |     1 |  2036 |     2   (0)| 00:00:01 |
--------------------------------------------------------------------------




统计信息
----------------------------------------------------------
          1  recursive calls                              --解析递归调用次数,再次调用该语句时不再需要
          0  db block gets                                --
          5  consistent gets                              --该语句执行访问了5个逻辑组
          0  physical reads
          0  redo size                                    --
       8808  bytes sent via SQL*Net to client             --网络的资源消耗发送给client
        385  bytes received via SQL*Net from client       --网络的资源消耗从client接受
          2  SQL*Net roundtrips to/from client            --协议来回2次
          0  sorts (memory)                               --内存中排序次数
          0  sorts (disk)                                 --硬盘中排序次数
          9  rows processed                               --一共处理了5条数据
----------------------------*/
--不出现查询结果的执行计划:
Set autotrace Trace[Only];
Select * From t1 Where object_id = 2;
/*
执行计划
----------------------------------------------------------
Plan hash value: 50753647


--------------------------------------------------------------------------------------
| Id  | Operation                   | Name   | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |        |     8 |  1416 |    11   (0)| 00:00:01 |
|   1 |  TABLE ACCESS BY INDEX ROWID| T1     |     8 |  1416 |    11   (0)| 00:00:01 |
|*  2 |   INDEX RANGE SCAN          | IDX_T1 |     8 |       |     1   (0)| 00:00:01 |                --先执行 INDEX RANGE SCAN索引范围扫描(对应 INDEX UNIQUE SCAN索引唯一扫描,唯一索引用)
--------------------------------------------------------------------------------------


Predicate Information (identified by operation id):                                                   --谓词信息
---------------------------------------------------


   2 - access("OBJECT_ID"=2)                                                                          --access表示多路径时的访问条件,一般都是先访问索引 {对应filter("OBJECT_ID"+0=2)唯一路径过滤条件}


Note
-----
   - dynamic sampling used for this statement




统计信息
----------------------------------------------------------
          0  recursive calls
          0  db block gets
         11  consistent gets
          0  physical reads
          0  redo size
       1788  bytes sent via SQL*Net to client
        385  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          8  rows processed
*/


select count(*) from dba_objects;
/*
执行计划
----------------------------------------------------------
Plan hash value: 2598313856


-----------------------------------------------------------------------------------------------
| Id  | Operation                       | Name        | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                |             |     1 |       |    31   (4)| 00:00:01 |
|   1 |  SORT AGGREGATE                 |             |     1 |       |            |          |
|   2 |   VIEW                          | DBA_OBJECTS |  8902 |       |    31   (4)| 00:00:01 |
|   3 |    UNION-ALL                    |             |       |       |            |          |
|*  4 |     FILTER                      |             |       |       |            |          |       --*表示用到了谓词信息
|*  5 |      HASH JOIN                  |             | 10045 |   745K|    30   (4)| 00:00:01 |       
|   6 |       TABLE ACCESS FULL         | USER$       |    28 |    84 |     2   (0)| 00:00:01 |       --#索引,$表
|*  7 |       TABLE ACCESS FULL         | OBJ$        | 10045 |   716K|    27   (0)| 00:00:01 |
|*  8 |      TABLE ACCESS BY INDEX ROWID| IND$        |     1 |     7 |     2   (0)| 00:00:01 |
|*  9 |       INDEX UNIQUE SCAN         | I_IND1      |     1 |       |     1   (0)| 00:00:01 |
|  10 |     NESTED LOOPS                |             |     1 |    16 |     1   (0)| 00:00:01 |
|  11 |      INDEX FULL SCAN            | I_LINK1     |     1 |    13 |     0   (0)| 00:00:01 |
|  12 |      TABLE ACCESS CLUSTER       | USER$       |     1 |     3 |     1   (0)| 00:00:01 |
|* 13 |       INDEX UNIQUE SCAN         | I_USER#     |     1 |       |     0   (0)| 00:00:01 |       -- INDEX UNIQUE SCAN索引唯一扫描
-----------------------------------------------------------------------------------------------       
                                                                                                      --执行顺序6,7,5,9,8,4,11,13,12,10,3,2,1,0
Predicate Information (identified by operation id):                                                   --谓词信息
---------------------------------------------------


   4 - filter("O"."TYPE#"<>1 AND "O"."TYPE#"<>10 OR "O"."TYPE#"=1 AND  (SELECT 1 FROM
              "SYS"."IND$" "I" WHERE "I"."OBJ#"=:B1 AND ("I"."TYPE#"=1 OR "I"."TYPE#"=2 OR
              "I"."TYPE#"=3 OR "I"."TYPE#"=4 OR "I"."TYPE#"=6 OR "I"."TYPE#"=7 OR "I"."TYPE#"=9))=1)
   5 - access("O"."OWNER#"="U"."USER#")
   7 - filter("O"."NAME"<>'_NEXT_OBJECT' AND "O"."NAME"<>'_default_auditing_options_'
              AND "O"."LINKNAME" IS NULL)
   8 - filter("I"."TYPE#"=1 OR "I"."TYPE#"=2 OR "I"."TYPE#"=3 OR "I"."TYPE#"=4 OR
              "I"."TYPE#"=6 OR "I"."TYPE#"=7 OR "I"."TYPE#"=9)
   9 - access("I"."OBJ#"=:B1)
  13 - access("L"."OWNER#"="U"."USER#")




统计信息
----------------------------------------------------------
          8  recursive calls
          0  db block gets
       2279  consistent gets
          0  physical reads
          0  redo size
        409  bytes sent via SQL*Net to client
        385  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed
*/
Select * From v$sql Where sql_text Like 'SELECT * FROM T1 WHERE OBJECT_ID%'
--OPTIMIZER statistics优化器统计信息


Sql> Exec dbms_stats.gather_table_stats('SYSTEM','T1',cascade => True);  --发出一个包,对优化器统计信息进行收集整理,(,cascade => True可以省略,作用是表索引的优化器统计信息一起收集),10g以上默认每晚22点开始自动收集整理
Select * From DBA_TABLES Where TABLE_NAME = 'T1'       --优化器统计信息相关的列,NUM_ROWS表里有多少行数据,BLOCKS存放数据使用的块数,AVG_ROW_LEN每行数据的长度字节数,
Select 79112*84/1024/1024 From dual                    --6.33755493164063 通过数据行数和每行数据的长度,计算表的大小,约为6M多
Select * From dba_tab_histograms Where table_name ='T1' And column_name = 'OBJECT_ID'   

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15810196/viewspace-1079758/,如需转载,请注明出处,否则将追究法律责任。

下一篇: 13.索引的使用
请登录后发表评论 登录
全部评论

注册时间:2011-07-19

  • 博文量
    53
  • 访问量
    131715