对于B*树索引,通常索引条目和行之间存在一种一对一的关系:一个索引条目就指向一行。
而对于位图索引,一个索引条目则使用一个位图同时指向多行。
使用create bitmap index...来创建位图索引。
位图索引适用于相异基数(distinct cardinality)低而且通常只读的数据(相异基数低的是指相对于表中的总行数,数据只有很少的几个不同值)。
考虑在一个有100万行的表中,某列只有3个可取值:Y、N和NULL。如果需要频繁地统计多少行有值Y,这就很适合建立位图索引。
如果在多个列上各自建立了位图索引,在这些列上进行的AND,OR,NOT的组合查询,Oracle只需要在对这些索引的位图进行AND,OR,NOT操作,就能得到结果集。
位图索引在读密集的环境中能很好地工作,但是对于写密集的环境则极不适用。
原因在于,一个位图索引键条目指向多行。如果一个会话修改了所索引的数据,那么在大多数情况下,这个索引条目指向的所有行都会被锁定。Oracle无法锁定一个位图索引条目中的单独一位;而是会锁定这个位图索引条目。
这样将大大影响并发性,因为更新一行时,需要独占地访问其中两个索引键条目:对应老值的索引键条目和对应新值的索引键条目。这两个条目指向的很多行就不允许其他会话修改,直到UPDATE提交。
因此,一般不适合于OLTP系统。
位图联结索引(bitmap join index)
位图联结索引允许使用另外某个表的列对一个给定表建立索引。
举例来说,有EMP表和DEPT表,EMP有指向DEPT 的一个外键(DEPTNO列),DEPT表有一个DNAME属性(部门名)。
位图联结索引可以有效地回答诸如“销售部门有多少人”这样的问题。
创建位图联结索引有一个先决条件,联结条件必须联结到另一个表中的主键或惟一键。
例如:
可以看到,不需要访问DEPT表,仅通过索引就可以回答上述查询。
分享到:
相关推荐
商业编程-源码-位图与调色板源代码 bitmap_picture_demo.zip
开源项目-boljen-go-bitmap.zip,go-bitmap - Some simple bitmap utilities - Could someone please review SetAtomic?
开源项目-seiflotfy-s-bitmap.zip,S-Bitmap: Distinct Counting with a Self-Learning Bitmap (an equivalent to HyperLogLog) implemented in Go
jar包,官方版本,自测可用
oracle位图索引,讲解oracle的bitmap索引。
2-9+bitmap在连续留存分析中的使用
Android开发者学习笔记-View、Canvas、bitmap.pdf
oracle
精彩编程与编程技巧-有 BitMap 之Menu ...
在 GENDER 列适当地带一个 bitmap 索引,在 SAL 列上创建另外一个位图索引,然后执行一些查询。在这些列上,用 B-tree 索引重新执行查询。 从 TEST_NORMAL 表,查询工资为如下的男员工: 1000 1500 2000 2500 3000 ...
sa-jdi-1.8.0.jar 位图BitMap
3-8+BitMap在大数据精准营销中的应用
9-slice Bitmap scaling by ByteArray. Very useful for GUI!!
本文作者---刘建华博士详细的介绍了位图bitmap图像数据文件格式;在此基础之上,实现bitmap图象数据文件的读写编程。希望对位图编程者有所帮助,互通有无... “A bitmap is a graphical object used to create, ...
jar包,官方版本,自测可用
我随便写的代码,不好请原谅,08年暑假准备做RPG《大学群侠传》有兴趣的加 QQ 46147155
bitmap-console-fonts-0.3-15.el6.noarch.rpm是centos工具包。
Android开发者学习笔记——View、Canvas、bitmap
一个DIB (位图)bitmap封装类 欢迎大家下载哈