`
talentluke
  • 浏览: 604427 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

B树索引与位图索引

 
阅读更多

一、 B树索引的缺陷

  在实际工作中,B树索引是Oracle数据库中最常用的一种索引。如在使用Create Index语句创建索引的时候,默认采用的就是B树索引。在B树索引中,是通过在索引中保存排序过的索引列以及其对应的Rowid列的值来实现的。不过对 于某些比较特殊的情况,如基数比较小的列,使用这个B树索引反而会降低数据库的查询效率。

  基数在Oracle数据库中指的是某个列可能拥有的不重复数值的个数。如上图为例,SEX指员工的性别,一般就只有男女两个值(其中1代表男、 0代表女),其基数就为2。假设企业要组织公司所有的女员工出去旅游,作为三八妇女节的礼物。为此就需要查询出公司所有女员工的信息。此时如果在性别列上 加入B树索引,那么反而会得到适得其反的效果。查询效率不但没有提升,反而下降。

  在这些基数比较小的列上创建B树索引并对其进行查询的话,系统就会返回大量的记录。因而这并不是具有高度选择性的索引,并不能够显着提高查询的速度。当然并不是说B树索引不好,而是指其没有用对地方。

  二、 位图索引的特点以及使用时机

  在数据库中(包括Sql Server数据库),对于这种基数比较小的列,如果只有有限的几个固定值,如上表中的性别、婚姻状况等等,要为其建立索引的话,采用的就应该是位图索引,而不是B树索引。

  位图索引为什么可以提高基数比较小的表的查询速度呢?这主要是因为在创建位图索引的时候,数据库往往会对整个表进行扫描,并未索引列的每个取值 建立一个位图(位图索引的名字也由此而来)。在这个位图中,为表中的每一行使用一个位元来表示该行是否包含该位图的索引列的取值。位元到行的ROWID的 对应关系通过位图索引中的应收函数来完成。如此的话,位图索引就能够以一种完全不同的内部机制来完成与B树索引相同的功能。

  另外值得一提的是,对于B树索引而言,如果在查询条件语句中采用了AND等操作符号,其查询的效率会大打折扣。故在数据库优化中,会建议大家不 要使用这些操作符,改用其他操作符代替。不过如果采用位图索引的话,则没有这方面的顾虑。如上例所示,假设用户需要查找已婚的女性,那么就可以使用如下的 语句查询。

  select t.*, t.rowid

  from userinfo t

  where t.merital=’已婚’ and t.sex=0

  这个查询引用了一些创建了位图索引的列时,这些位图可以很方便的与AND或者OR操作符结合以找出想要的数据。数据库在后台处理的时候,先利用 已经创建的位图进行逻辑运算,然后计算结果位图中1的个数,就可以查询到满足条件的所有记录。如果查询到结果后还需要更改数据的话,那么只需要按照结果位 图中取1的位元对应的ROWID列的值进行映射即可。

  三、 位图索引的使用限制

  位图索引虽然在某些情况下能够起到比B树索引更好的效果。但是需要注意的是,并不是在任何场合都有效。如上例所示,如果在员工编号或者员工姓名 列中使用的话,反而会降低数据查询的效率。故其使用仍然受到比较大的限制。如上面列举的案例,一般情况下只有在“基数比较小的列中”和“需要使用与和或的 运算中”采用位图索引能够起到比B树索引更好的效果。其他情况还是使用B数索引或者函数索引为好。

  在Oracle数据库中,有B树索引、位图索引、函数索引等等。具体采用哪种索引,还是要根据不同的情形来对待。随着数据库应用越来越复杂,单 靠一个B树索引已经不能够应付了。如列中包含了表达式或者函数的话,B树索引或者位图索引都不能够用,只有用函数索引。对于数据库专家来说,索引的创建与 管理或许没有难度,只需要简单的几个语句即可。比较困难的是,如何根据实际情况来选择合适的索引。

 

 

b-tree  索引 是 当在一个表的某个字段或者某几个字段上 (叫 key value )建立索引时候,oracle 会把这一个或几个字段全部读出来,包括 key value 所在行的 rowid , 然后排序,缺省是 升序,从小到大, 唯一性索引就按照key value 排序,如果是非唯一性索引,就是 key value +  该行所在的 rowid 排序。
然后 将这些数据写入到 索引块 里面去 。 然后就生成了 b-tree 索引.
用在选择性高 /或者叫 基数高的情况下, oltp 类型

 

bitmap 索引是 用 bitmap 来表示 相关的key value 。 例如 如果一个字段(列)上的值 是  男/女 ,或者 结婚/未婚/离异,或者 地区 : 北京/上海/广州。
建立索引的列上 有几个这个的值,该表就会 有几个 bitmap ,set 置位 1 就表示 该行的值是相应的值。  通过 maping function 来获得具体的rowid值

例如 表 有5行数据, 地区 , 建立bitmap
北京: 10010
上海:   01001
广州:   00100

用在选择性低, 基数低的情况,  不同的值小于1% , 或者 重复数量大于100个,就可以考虑 bitmap索引。
bitmap 索引在 datawarehousing 数据仓库中较多应用。

位图索引用在选择性低, 基数低的情况,  不同的值小于1% , 或者 重复数量大于100个,就可以考虑 bitmap索引。

分享到:
评论

相关推荐

    位图索引与 B-tree 索引:选择与时间

    位图索引与B树(B-tree)索引是数据库管理系统中常见的两种索引结构,它们各自具有不同的特性和适用场景。在理解这两种索引之前,我们先来了解一下索引的基本概念。 索引是数据库为了加速数据检索而创建的一种数据...

    深入研究B树索引.doc

    除了常见的B树索引之外,还有多种变体,如分区索引、非分区索引、常规B树索引、位图索引以及翻转索引等。不同类型的索引适用于不同的场景。例如,位图索引在处理高基数(即取值分布很广)但选择性较低(即过滤条件不...

    深入研究B树索引

    ### 深入研究B树索引 #### B树索引概述 B树索引是一种高效的数据结构,广泛应用于数据库管理系统中,以提高数据检索的速度并确保数据的唯一性。B树索引的设计目的是为了最小化查找时间,尤其是在大规模数据集上。...

    Oracle数据库--索引讲义.pptx

    2. **B树索引与位图索引** - **B树索引**是最常见的索引类型,类似二叉树结构。每个索引条目对应表中的一行数据,便于单个值的查找。B树索引通常具有较低的树高(2或3),其叶子节点直接指向数据行的ROWID。 - **...

    位图索引简单实验

    为了进行位图索引与B*树索引的对比实验,首先需要创建一个包含大量数据的测试表。这里通过`dba_objects`表作为数据源来构建测试表`leo_bm_t1`,然后对该表进行了两次复制插入操作,以确保表中有足够的数据量用于后续...

    Oracle数据库 jsp学习教案.pptx

    综上所述,这个教程涵盖了Oracle数据库索引的基本概念,包括B树索引和位图索引的原理、优缺点以及如何管理和创建索引。这对于理解和优化Oracle数据库的性能至关重要。对于JSP的学习者,理解如何与Oracle数据库交互也...

    位图索引在ORACLE中的应用.pdf

    Oracle提供了两种主要的索引方式:B树索引和位图索引。 B树索引是最常见的索引形式,它按照索引字段值的顺序存储ROWID,对于高基数字段,即具有大量不同值的字段,B树索引表现优秀。然而,对于低基数字段,B树索引...

    Oracle 数据库的位图索引原理与应用.pdf

    在查询中,这些字段一般用作计数条件,使用 B 树索引,查询效率不会得到显著提高,而位图索引恰恰适合这类要求。 三、位图索引的优点 位图索引有以下几个优点: * 高效查询:位图索引可以快速定位满足条件的记录...

    Oracle数据库入门学习课件ppt

    - B树索引与位图索引:不同类型的索引及其适用场景。 - 索引的创建与维护:CREATE INDEX、DROP INDEX命令。 7. **视图**: - 视图的定义:虚拟表,基于一个或多个表的查询结果。 - 创建视图:CREATE VIEW语句。...

    Oracle B*树索引内部机制及其应用的研究.pdf

    B*树(B-star tree)是B树的一个变种,它在B树的基础上进行了优化,以适应大规模数据存储和高效查询的需求。 B*树索引的核心特点在于它的分层结构,每个节点可以包含多个子节点,并且每个节点可以存储多个键值和...

    B+树索引实验报告.pdf

    《B+树索引原理与实现》 B+树索引是数据库系统中常用的一种高效检索数据的结构,尤其在大型数据库中,它的优势在于能够快速定位数据并减少磁盘I/O操作。本文将深入探讨B+树索引的原理、实现及实验步骤。 B+树是一...

    oracle实验9-10-索引与视图-序列和同义词的创建.doc

    本实验中,我们将创建唯一的 B 树索引、普通的 B 树索引和位图索引。 二、视图的概念和优点 视图是数据库中的一种虚拟表,它是基于基本表的查询结果。视图可以简化复杂的查询、提高查询效率和保护数据安全。本实验...

    快速搜索位图索引中1的个数.rar

    6. **位图索引的优化**:在数据库中,位图索引可能与其他索引(如B树)结合使用,提供不同类型的查询优化。例如,对于范围查询,可以使用位图索引快速筛选出符合条件的记录,再通过其他索引进行精确查找。 7. **...

    oracle索引,常见索引问题

    常见的索引类型包括B*树索引和位图索引,每种都有其特定的应用场景和优势。 1. **B*树索引**:这是最常见的索引类型,类似于二叉树结构,能高效地根据键值进行查找。B*树索引有以下几种子类型: - **索引组织表...

    oracle技巧总结

    本文将深入探讨B树索引和位图索引的特性、适用场景以及如何选择合适的索引类型。 B树索引是一种最常见的索引类型,尤其适合高基数(high-cardinality)的列,即具有大量不同值的列。B树索引通过分层结构存储数据,...

    关于数据仓库中编码位图索引的研究.pdf

    此外,简单位图索引的时间和空间开销要比 B- 树索引少,但是当属性 A 的基数 m 越来越大时,简单位图索引的空间开销将增加。 编码位图索引是一种新型的索引技术,它可以解决简单位图索引的一些局限性。编码位图索引...

    Oracle 索引

    Oracle提供了多种类型的索引,包括B树索引、位图索引、函数索引、唯一索引和复合索引等,每种都有其独特的应用场景和优缺点。 1. **B树索引**:这是最常见的索引类型,适用于频繁的查询操作。B树索引通过排序的数据...

Global site tag (gtag.js) - Google Analytics