当前位置:  数据库>oracle

B-Tree索引性能优于BitMap索引实例

    来源: 互联网  发布时间:2017-06-10

    本文导语: 一、实验说明:      操作系统:rhel 5.4 x86     数据库:Oracle 11g R2     实验说明:该实验是为了说明B-Tree索引性能优于BitMap索引的情况。  Oracle B树索引简介(B-Tree Index)  浅析Oracle B-Tree index搜索原理 Oracle索引之B-Tree和Bitm...

一、实验说明:

     操作系统:rhel 5.4 x86

    数据库:Oracle 11g R2

    实验说明:该实验是为了说明B-Tree索引性能优于BitMap索引的情况。 

Oracle B树索引简介(B-Tree Index) 

浅析Oracle B-Tree index搜索原理

Oracle索引之B-Tree和Bitmap索引对比

从平衡树到oracle B-Tree索引的原理探索

二、实验操作:

  首先创建一张t_btree表,并建立B-Tree索引,索引键是object_id:

SQL> create table t_btree as select * from dba_objects;

Table created.

SQL> create index ind_tree on t_btree(object_id);

Index created.

执行两次下面的查询语句,并显示执行计划:

SQL> set autotrace traceonly;
SQL> select * from t_btree where object_id=9899;


Execution Plan
----------------------------------------------------------
Plan hash value: 447474086

----------------------------------------------------------------------------------------
| Id  | Operation            | Name    | Rows  | Bytes | Cost (%CPU)| Time    |
----------------------------------------------------------------------------------------
|  0 | SELECT STATEMENT        |          |    1 |  207 |    2    (0)| 00:00:01 |
|  1 |  TABLE ACCESS BY INDEX ROWID| T_BTREE  |    1 |  207 |    2    (0)| 00:00:01 |
|*  2 |  INDEX RANGE SCAN        | IND_TREE |    1 |      |    1    (0)| 00:00:01 |
----------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

  2 - access("OBJECT_ID"=9899)

Note
-----
  - dynamic sampling used for this statement (level=2)


Statistics
----------------------------------------------------------
    312  recursive calls
      0  db block gets
    108  consistent gets
    289  physical reads
      0  redo size
  1404  bytes sent via SQL*Net to client
    419  bytes received via SQL*Net from client
      2  SQL*Net roundtrips to/from client
      0  sorts (memory)
      0  sorts (disk)
      1  rows processed

SQL> select * from t_btree where object_id=9899;


Execution Plan
----------------------------------------------------------
Plan hash value: 447474086

----------------------------------------------------------------------------------------
| Id  | Operation            | Name    | Rows  | Bytes | Cost (%CPU)| Time    |
----------------------------------------------------------------------------------------
|  0 | SELECT STATEMENT        |          |    1 |  207 |    2    (0)| 00:00:01 |
|  1 |  TABLE ACCESS BY INDEX ROWID| T_BTREE  |    1 |  207 |    2    (0)| 00:00:01 |
|*  2 |  INDEX RANGE SCAN        | IND_TREE |    1 |      |    1    (0)| 00:00:01 |
----------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

  2 - access("OBJECT_ID"=9899)

Note
-----
  - dynamic sampling used for this statement (level=2)


Statistics
----------------------------------------------------------
      0  recursive calls
      0  db block gets
      4  consistent gets
      0  physical reads
      0  redo size
  1404  bytes sent via SQL*Net to client
    419  bytes received via SQL*Net from client
      2  SQL*Net roundtrips to/from client
      0  sorts (memory)
      0  sorts (disk)
      1  rows processed

同样执行之前的语句两次:

SQL>  select * from t_bmap where object_id=9899;


Execution Plan
----------------------------------------------------------
Plan hash value: 3763176822

----------------------------------------------------------------------------------------
| Id  | Operation            | Name    | Rows  | Bytes | Cost (%CPU)| Time    |
----------------------------------------------------------------------------------------
|  0 | SELECT STATEMENT        |          |    1 |  207 |  110    (0)| 00:00:02 |
|  1 |  TABLE ACCESS BY INDEX ROWID | T_BMAP  |    1 |  207 |  110    (0)| 00:00:02 |
|  2 |  BITMAP CONVERSION TO ROWIDS|          |      |      |        |          |
|*  3 |    BITMAP INDEX SINGLE VALUE | IND_MAP |      |      |        |          |
----------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

  3 - access("OBJECT_ID"=9899)

Note
-----
  - dynamic sampling used for this statement (level=2)


Statistics
----------------------------------------------------------
    312  recursive calls
      0  db block gets
    98  consistent gets
    266  physical reads
      0  redo size
  1404  bytes sent via SQL*Net to client
    419  bytes received via SQL*Net from client
      2  SQL*Net roundtrips to/from client
      0  sorts (memory)
      0  sorts (disk)
      1  rows processed

SQL> select * from t_bmap where object_id=9899;


Execution Plan
----------------------------------------------------------
Plan hash value: 3763176822

----------------------------------------------------------------------------------------
| Id  | Operation            | Name    | Rows  | Bytes | Cost (%CPU)| Time    |
----------------------------------------------------------------------------------------
|  0 | SELECT STATEMENT        |          |    1 |  207 |  110    (0)| 00:00:02 |
|  1 |  TABLE ACCESS BY INDEX ROWID | T_BMAP  |    1 |  207 |  110    (0)| 00:00:02 |
|  2 |  BITMAP CONVERSION TO ROWIDS|          |      |      |        |          |
|*  3 |    BITMAP INDEX SINGLE VALUE | IND_MAP |      |      |        |          |
----------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

  3 - access("OBJECT_ID"=9899)

Note
-----
  - dynamic sampling used for this statement (level=2)


Statistics
----------------------------------------------------------
      7  recursive calls
      0  db block gets
    68  consistent gets
      0  physical reads
      0  redo size
  1404  bytes sent via SQL*Net to client
    419  bytes received via SQL*Net from client
      2  SQL*Net roundtrips to/from client
      0  sorts (memory)
      0  sorts (disk)
      1  rows processed

从上面的查询中,我们可以得到,分别给两张内容一样的表做查询的时候,在执行第二次的时候是属于软解析:

从一致性读上比较,B-Tree索引的consistent gets是4,BitMap的是68;

从Cost的消耗上看,B-Tree索引的COST是2,而BitMap的是110。

在索引键是主键或者唯一性约束的情况下B-Tree索引的效率要优于BitMap索引。


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++模板库 C++ B-tree


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,