zoukankan      html  css  js  c++  java
  • BITMAP CONVERSION FROM ROWIDS

    示例如下(请自己动手实验):
    
    create table test1 as select * from dba_objects;
    create table test2 as select * from dba_objects;
    create index idx1 on test1(object_id);
    create index idx2 on test1(owner);
    create index idx3 on test2(object_id);
    create index idx4 on test2(owner);
    
    BEGIN
      DBMS_STATS.GATHER_TABLE_STATS(ownname          => 'SCOTT',
                                    tabname          => 'TEST1',
                                    estimate_percent => 100,
                                    method_opt       => 'for  columns owner size 200',
                                    no_invalidate    => FALSE,
                                    degree           => 1,
                                    cascade          => TRUE);
    END;
    /
    
    BEGIN
      DBMS_STATS.GATHER_TABLE_STATS(ownname          => 'SCOTT',
                                    tabname          => 'TEST2',
                                    estimate_percent => 100,
                                    method_opt       => 'for  columns owner size 200',
                                    no_invalidate    => FALSE,
                                    degree           => 1,
                                    cascade          => TRUE);
    END;
    /
    
    比如这个SQL:
    
    select * from test1 where owner='SCOTT' or object_id in(select object_id from test2 where owner='SCOTT');
    
    执行计划如下:
    
    select * from test1 where owner='SCOTT' or object_id in(select object_id from test2 where owner='SCOTT');
    
    1859 rows selected.
    
    
    Execution Plan
    ----------------------------------------------------------
    Plan hash value: 4136318878
    
    ------------------------------------------------------------------------------------------
    | Id  | Operation			 | Name  | Rows  | Bytes | Cost (%CPU)| Time	 |
    ------------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT		 |	 |  5493 |   520K|   296   (1)| 00:00:04 |
    |*  1 |  FILTER 			 |	 |	 |	 |	      | 	 |
    |   2 |   TABLE ACCESS FULL		 | TEST1 | 74533 |  7060K|   296   (1)| 00:00:04 |
    |   3 |   BITMAP CONVERSION TO ROWIDS	 |	 |     1 |    19 |     2   (0)| 00:00:01 |
    |   4 |    BITMAP AND			 |	 |	 |	 |	      | 	 |
    |   5 |     BITMAP CONVERSION FROM ROWIDS|	 |	 |	 |	      | 	 |
    |*  6 |      INDEX RANGE SCAN		 | IDX3  |  1860 |	 |     1   (0)| 00:00:01 |
    |   7 |     BITMAP CONVERSION FROM ROWIDS|	 |	 |	 |	      | 	 |
    |*  8 |      INDEX RANGE SCAN		 | IDX4  |  1860 |	 |     1   (0)| 00:00:01 |
    ------------------------------------------------------------------------------------------
    
    Predicate Information (identified by operation id):
    ---------------------------------------------------
    
       1 - filter("OWNER"='SCOTT' OR  EXISTS (SELECT 0 FROM "TEST2" "TEST2" WHERE
    	      "OBJECT_ID"=:B1 AND "OWNER"='SCOTT'))
       6 - access("OBJECT_ID"=:B1)
       8 - access("OWNER"='SCOTT')
    
    
    Statistics
    ----------------------------------------------------------
    	  1  recursive calls
    	  0  db block gets
         475201  consistent gets
    	  0  physical reads
    	  0  redo size
          70860  bytes sent via SQL*Net to client
           1772  bytes received via SQL*Net from client
    	125  SQL*Net roundtrips to/from client
    	  0  sorts (memory)
    	  0  sorts (disk)
           1859  rows processed
    
    
    由于在test2上创建的都是单列索引:
    create index idx3 on test2(object_id);
    create index idx4 on test2(owner);
    
    
    在test2上创建组合索引
    create index idx5 on test2(object_id,owner);
    
    SQL> select * from test1 where owner='SCOTT' or object_id in(select object_id from test2 where owner='SCOTT');
    
    1859 rows selected.
    
    
    Execution Plan
    ----------------------------------------------------------
    Plan hash value: 4133849820
    
    --------------------------------------------------------------------------------------
    | Id  | Operation		     | Name  | Rows  | Bytes | Cost (%CPU)| Time     |
    --------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT	     |	     |	5493 |	 520K|	 296   (1)| 00:00:04 |
    |*  1 |  FILTER 		     |	     |	     |	     |		  |	     |
    |   2 |   TABLE ACCESS FULL	     | TEST1 | 74533 |	7060K|	 296   (1)| 00:00:04 |
    |*  3 |   TABLE ACCESS BY INDEX ROWID| TEST2 |	   1 |	  19 |	   4   (0)| 00:00:01 |
    |*  4 |    INDEX RANGE SCAN	     | IDX4  |	1860 |	     |	   1   (0)| 00:00:01 |
    --------------------------------------------------------------------------------------
    
    Predicate Information (identified by operation id):
    ---------------------------------------------------
    
       1 - filter("OWNER"='SCOTT' OR  EXISTS (SELECT 0 FROM "TEST2" "TEST2" WHERE
    	      "OWNER"='SCOTT' AND "OBJECT_ID"=:B1))
       3 - filter("OBJECT_ID"=:B1)
       4 - access("OWNER"='SCOTT')
    
    
    Statistics
    ----------------------------------------------------------
    	  1  recursive calls
    	  0  db block gets
        2399432  consistent gets
    	  0  physical reads
    	  0  redo size
          70860  bytes sent via SQL*Net to client
           1772  bytes received via SQL*Net from client
    	125  SQL*Net roundtrips to/from client
    	  0  sorts (memory)
    	  0  sorts (disk)
           1859  rows processed
    


     

  • 相关阅读:
    image对象
    Frame/IFrame 对象
    Form 对象
    JavaScript 对象 实例
    button对象
    正则介绍以及多种使用方法
    js /jquery停止事件冒泡和阻止浏览器默认事件
    一些兼容性的知识
    面试题总结
    事件
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13352410.html
Copyright © 2011-2022 走看看