`
talentluke
  • 浏览: 592203 次
  • 性别: 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*树索引和位图索引,位图索引更加适合重复值较大的值。

    数据库索引技术ppt

    文件记录的组织方式 索引技术基础 B+树索引 散列索引 位图索引 多维空间索引 Grid file, R-tree, kd-tree, quadtree, Space Filling Curve

    论文研究-基于位图索引和B 树的BLAST改进算法.pdf

    为了有效地进行XML信息检索,提出了一种新的计算用户查询与XML文档之间相似度的算法。该算法分为三步:基于WordNet对用户查询q进行同义词扩展得到q';将q'和D中的每一篇XML文档都进行数字签名,并通过签名之间的匹配...

    结合分段位图和B+树的云数据索引机制研究 (2016年)

    针对位图索引数据存储空间大、检索效率低的问题,提出了一种结合分段位图和B▲+△树的云数据索引机制(BBI)。BBI在索引创建时按照一定的基数对元组数据进行分段,以段为单位建立位图索引,索引数据量的决定因子由...

    oracle使用索引与不使用索引的性能详析

    位图索引也是如此,仅仅只是是叶子节点不同B*数索引; 索引由根节点、分支节点和叶子节点组成。上级索引块包括下级索引块的索引数据,叶节点包括索引数据和确定行实际位置的rowid。 使用索引的目的: 加快查询速度 ...

    ORACLE检查找出损坏索引(Corrupt Indexes)的方法详解

    索引 索引与表一样,也属于段...从物理上说,索引通常可以分为:分区和非分区索引、常规B树索引、位图(bitmap)索引、翻转(reverse)索引等。其中,B树索引属于最常见的索引。 引言 本文主要给大家介绍了关于ORAC

    oracle 三种索引

    oracle 三种索引的简单描述,位图、B树、全文索引。

    CcoWzh#Interview-Of-Programmer#MySQL索引原理1

    MySQL索引原理查找算法:二叉查找树BitMap位图索引分类主键索引唯一索引普通索引全文索引索引原理解析B+树聚集索引和非聚集索引建立索引创建表时指定组合索引

    ORACLE教材

    B树索引(默认) 位图索引 函数索引 视图 序列 利用OEM操作 第九章:备份与恢复 脱机备份与恢复 联机备份与恢复 逻辑备份与恢复 第十章:sqlplus基础 设置SQL*PLUS的运行环境 格式化查询命令 第十一...

    Greenplum数据库架构.pdf

    PL/Perl,PL/PHP,PL/Python,PL/Ruby, PL/sh,PL/Tcl,PL/Scheme 索引 表达式索引 位图索引 B树索引 Greenplum数据库 基于PostgreSQL 8.2.14 相同的客户端功能 增加支持并行处理的技术 增加支持数据仓库和BI的特性...

    关系型数据库性能体系设计和效率提升.docx

    5.1.3 B树索引、位图索引与函数索引 15 5.2 命名规范 15 5.3 索引设计规范 15 5.3.1 指定表空间规范 16 5.3.2 主键索引的规范 16 5.3.3 唯一约束索引的规范 17 5.3.4 外键列索引的规范 17 5.3.5 复合索引的规范 17 ...

    数据库系统概论chp3-2.pptx

    关系数据库管理系统中常见索引: 顺序文件上的索引 B+树索引 散列(hash)索引 位图索引 特点: B+树索引具有动态平衡的优点 HASH索引具有查找速度快的特点 数据库系统概论chp3-2全文共66页,当前为第6页。...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    1. 层次结构模型: 层次结构模型实质上是一种有根结点的定向有序树,IMS(Information Manage-mentSystem)是其典型代表。 2. 网状结构模型:按照网状数据结构建立的数据库系统称为网状数据库系统,其典型代表是DBTG...

    数据库系统实现

    5.4.4 位图索引的管理 习题 5.5 小结 5.6 参考文献 第6章 查询执行 6.1 一种查询代数 6.1.1 并、交和差 6.1.2 选择操作符 6.1.3 投影操作符 6.1.4 关系的积 6.1.5 连接 6.1.6 消除重复 ...

    论文研究-结合SVM与DS证据理论的信息融合分类方法.pdf

    针对BLAST算法在查找命中的过程中需要遍历数据库造成计算资源消耗的问题,提出了基于位图索引和B 树的数据存储方式以加快数据的检索。改进算法利用位图索引的原理建立数据库的单词-位向量表,并对这个表使用B 树再次...

    Oracle 9i&10g编程艺术:深入数据库体系结构(全本)含脚本

    11.2.4 什么情况下应该使用B*树索引? 437 11.2.5 B*树小结 448 11.3 位图索引 448 11.3.1 什么情况下应该使用位图索引? 449 11.3.2 位图联结索引 453 11.3.3 位图索引小结 455 11.4 基于函数的索引 456 ...

    Oracle+10g应用指导与案例精讲

    索引,包括B树索引、基于函数的索引、位图索引、反向索引、降序索引、压缩索引等的使用方法及其适用情形等。在案例精讲中,对表压缩、约束的使能与失能、表的层次结构查询、防止删除表及对象、提取创建外键约束的...

    Oracle 10g应用指导

    索引,包括B树索引、基于函数的索引、位图索引、反向索引、降序索引、压缩索引等的使用方法及其适用情形等。在案例精讲中,对表压缩、约束的使能与失能、表的层次结构查询、防止删除表及对象、提取创建外键约束的...

Global site tag (gtag.js) - Google Analytics