`

oracle B-Tree和Bitmap索引对比详解

 
阅读更多

http://space.itpub.net/?uid-13062352-action-viewspace-itemid-614553

 

oracle B-Tree和Bitmap索引对比详解

B树索引是所有大型关系数据库毕用的技术,也是oracle数据库默认的索引技术。
基数:指的是你要创建索引的列中所包含的不同键值的数量。例如我们的列是性别,那么它的键值就是男、女所以你的索引基数是2.
oracle中每个表的行都有一个rowid,用于标记这个行在数据库中的位置。

关于索引:
B-TREE索引,结构如下:
               root
               / | \
  branch1 ........
     /|\ ......................
leaf1......

leaf节点的结构是这样的:
   |索引头|列长度|列内容|rowid(s)|

一个叶子节点的大小大概是8192*8bit,因此一个字段的长度即使是50,那么一个节点大概能分成100个子节点,那么100万的记录,也只需要3级节点即可索引完毕,因此一般b-tree的深度不超过4级,这样根据b-tree来查找一条记录,最多只需遍历4个节点找到rowid,再根据rowid查找磁盘即可得到最终记录数据。


对某列查询的结果集记录数如果通常都小于7%,则应该在该列添加索引。对b-tree来说,where xx is null条件是不会利用索引的,因此建议这种列应该设置默认值,以避免该列的值存在null的情况,同样group by 中如果该列有null索引也可能无效。

bitmap索引:
bitmap索引的结构也是树形结构,但是叶子节点的结构与b-tree不一样。bitmap叶子节点的结果大概如下:
<key1 start-rowid  end-rowid  bitmap>
<key2 start-rowid  end-rowid  bitmap>
......
其中bitmap的内容是110010100011100001这样的01组合形式,它的长度与start-rowid和end-rowid之间包含的rowid数量一致。这样假设范围内第9个rowid对应列的内容是key1,那么kei1对应的bitmap中第9个字符的值就是1,否则就是0。同样每个块的大小是8192*8,那么一个bitmap索引的叶子节点大概能索引10000条记录。
bitmap索引对null的字段依然有效,具体null的值在bitmap中是取0还是专门有个keyX的值是null来区分需要再查证。bitmap索引对or条件的查询效果非常好,它不适应与索引列的值经常变化的情况,如果索引列的值经常变化,那么对bitmap索引将是灾难性的,因为它要锁定所有相关的叶子节点所在的块来更新bitmap的值,它适用于决策支持系统。

分享到:
评论

相关推荐

    Oracle 索引 详解

    Oracle 索引详解 Oracle 索引是数据库性能优化的重要工具,它可以大大加快数据的检索速度,提高系统的性能。但是,索引也存在一些缺陷,例如创建索引和维护索引要耗费时间,索引需要占物理空间,等等。在本文中,...

    Oracle Index 索引介绍

    **Oracle索引详解** Oracle索引是数据库管理系统中用于提高查询效率的重要数据结构。它的工作原理类似于书籍的目录,允许数据库系统快速定位到所需的数据行,而无需扫描整个表。索引的存在使得对大量数据的查找、...

    oracle索引介绍(图文详解)

    1. B-Tree索引:这是最常见的索引类型,包括正常B-Tree索引和倒序B-Tree索引。B-Tree是一种自平衡的多路搜索树,每个节点包含多个键和指针,确保查找效率较高。正常B-Tree索引按升序存储键值,而倒序B-Tree索引则按...

    Oracle索引详解

    `UNIQUE`创建唯一索引,`BITMAP`创建位图索引,若无此指定,则默认创建为B-Tree索引。 - 在`ON`子句中,可以指定一个或多个列创建联合索引,当使用表达式时,即创建基于函数的索引。 - `TABLESPACE`指定了索引文件...

    Oracle数据操作和控制语言详解(初学者指南).rar

    Oracle支持多种类型的索引,如B-Tree、Bitmap、Function-Based和Index-Organized Table。创建索引的命令为: ```sql CREATE INDEX 索引名 ON 表名 (列); ``` 九、视图 视图是虚拟表,基于一个或多个表的查询结果。...

    oracle ppt文件

    学习如何创建(CREATE INDEX)、修改(ALTER INDEX)和删除(DROP INDEX)索引,以及理解不同类型的索引(B-Tree、Bitmap、Clustered)和性能影响。 七、视图与存储过程 视图是虚拟表,基于一个或多个表的查询结果...

    bit map index

    传统上,数据库系统如Oracle使用B-Tree索引来加速查询,但对于具有少量唯一值的列,B-Tree索引可能不是最佳选择,因为这类索引可能会导致大量的I/O操作,尤其是在选择性较差的情况下。这时,位图索引就能发挥其优势...

    Oracle数据库教程

    16. 索引:介绍Oracle中索引的类型(如B-tree、bitmap、function-based索引等),以及如何建立和优化索引。 17. 序列、同义词:解释序列的创建和使用,以及如何通过同义词简化对象的引用。 18. PL SQL:详细介绍...

    oracle 笔试题

    - B-Tree索引通常比表本身要小,因为索引只包含了字段a的数据和指向实际行的指针,而不包括其他字段的数据。 - 因此,在大多数情况下,索引的大小会小于表本身的大小。 #### 5. 物理备库的不同保护级别 - **最大...

    Oracle经典教程(推荐)word版

    - `B-Tree Index`: 最常见的索引类型,用于加速基于索引列的查找操作。 - `Bitmap Index`: 适用于包含大量重复值的情况。 - `Reverse Key Index`: 用于避免重复键值冲突。 - `Function-Based Index`: 基于表达式...

    DBA面试有答案

    - **B-Tree Index**: 最常见的索引类型,适用于范围查询。 - **Bitmap Index**: 主要用于数据仓库环境中的维度表,适用于大量重复值的列。 - **Function-Based Index**: 基于表达式的索引,适用于复杂的查询条件...

Global site tag (gtag.js) - Google Analytics