位图索引 btree索引

位图索引(bitmpa index)简介:
传统的索引使用B树,通过索引来查找叶子。而位图索引保存rowid的位图,该位图指出哪个行对应与索引项,若位被设置,则指出对应行包括键值,若位不被设置,则不包括。

1、何时使用位图索引:
位图索引可以很好的工作在有低基数(Cardinality)的列上,即有不同值的列数少于表中的行数,例如性别,婚姻状况等等。若列值重复超过数百次,则该列是候选的位图索引。

在决定是否使用位图索引时,必须综合考虑索引方案的以下几个方面:

(1)性能方面:
位图索引可以充分的改善有以下特性的查询性能:
◎where子句包含低或中等基数的列上的多个谓词。
◎这些低或中等基数的列上的单个谓词选择大量的行。
◎位图索引已经建立在某些或全部的这些低或中等基数的列上。
◎要求表包含许多行。

可以使用多个位图索引评价单个表上的条件。位图索引对于包含长where子句的特别复杂查询是很有用的。位图索引也可以为合计类查询提供最佳的性能。

(2)存储方面
与多列B树索引相比,位图索引可以节约相当可观的存储。由于复合B树索引必须要对这些列中的所有排列进行索引,所以耗费大量的存储空间是可想而知的。位图索引很好的解决了这个问题。在查询期间位图索引可以高效的结合。

若位图索引建立在唯一列上,则它比B树需要更多的空间。但对于每个值重复数百次或上千次的列,位图索引通常比正常B树索引的大小要少25%。位图是按压缩格式保存的。

但是简单的比较B树和位图索引的相对大小不是一种精确的效率测量方法。因为不同的性能特性,应该在高基数的数据上保持B树索引,在低基数的列上建立位图索引。

(3)维护方面:
位图索引最适合数据仓库应用程序(有大量的数据和特定查询,但并行事务少)。对于这样的应用

程序,位图索引提供:
◎多种特定查询,减少响应时间
◎相对与其他索引技术,减少空间的使用
◎显著的性能收益,即使在非常低端的硬件上
◎非常高效的并行DML和装入

用传统的B树索引来在空间上全部索引一个大表,可能花费过高,这因为索引数据可能是表中数据的数倍,位图索引通常只是表中数据的一小部分。

但是位图索引不适合OLTP应用程序(有大量的并发事务修改数据)。该索引主要是应用与数据仓库应用程序中的决策支持(DDS,用户通常是查询数据,而不是更新它)。

位图索引与oracle基于成本优化方法和执行工具结合在一起。他们可以与其他oracle执行方法紧密的结合在一起使用。

并行查询和并行DML可以与位图索引一起工作,像与传统索引一样,支持并行建立索引,也支持连接索引。

2、位图索引的其他考虑
为了使用位图索引获取最佳性能和磁盘空间的使用,注意以下几点
◎使用大的数据块可以改善排序、检索位图索引的效率
◎为了使压缩的位图尽可能小,应该在不包含空值的所有列上说明 not null约束。
◎固定长度的数据类型比变长的更利于紧凑的位图。

位图索引可以对空值索引,而其他索引类型却不可以。初始化参数CREATE_BITMAP_AREA_SIZE和BITMAP_MERGE_AREA_SIZE影响位图索引的性能。

使用位图索引有以下一些限制
◎对于有直接装载的位图索引,不提供SORTED_INDEX标记
◎执行增加或修改位图索引列的alter table命令,可能会引起索引无效
◎基于规则的优化器不考虑位图索引
◎位图索引不可用于引用完整性检查。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章