位图索引(Bitmap Index)

来源:互联网 发布:java 加密压缩文件 编辑:程序博客网 时间:2024/05/22 03:48
位图索引区别于传统B*树索引有两个结构特点:其一是叶子节点上是一个可能的索引列取值对应一个叶子节点。另一个就是叶子节点上通过一个位图向量表示对应行是否取定这个索引值。

使用位图向量记录对应行的取值情况不仅可以带来存储空间上的节省,而且可以借助计算机位图运算的快速特性来提高索引结果利用率。下面我们通过模拟情况来进行分析。

BitmapIndex模拟说明

假设存在数据表T,有两个数据列A和B,取值如下。

序号

A

B

1

L

1

2

T

2

3

L

2

4

M

1

对两个数据列A、B分别建立位图索引:idx_t_bita和idx_t_bitb。两个索引对应的存储逻辑结构如下:

Idx_t_bita索引结构,对应的是叶子节点:

索引键值

起始rowid

结束rowid

位图向量

L

xxx

ttt

1010

T

xxx

ttt

0100

M

xxx

ttt

0001

Idx_t_bitb索引结构,对应的是叶子节点:

索引键值

起始rowid

结束rowid

位图向量

1

xxx

ttt

1001

2

xxx

ttt

0110

 

 

 

 

对查询“select * from t where b=1 and (a=’L’ or a=’M’)”

分析:位图索引使用方面,和B*索引有很大的不同。B*索引的使用,通常是从根节点开始,经过不断的分支节点比较到最近的符合条件叶子节点。通过叶子节点上的不断Scan操作,“扫描”出结果集合rowid

而位图索引的工作方式截然不同。通过不同位图取值直接的位运算(与或),来获取到结果集合向量(计算出的结果)。

针对实例SQL,可以拆分成如下的操作:

1、a=’L’ or a=’M’

a=L:向量:1010

a=M:向量:0001

or操作的结果,就是两个向量的或操作:结果为1011。

2、结合b=1的向量

中间结果向量:1011

B=1:向量:1001

and操作的结果,1001。翻译过来就是第一和第四行是查询结果。

3、获取到结果rowid

目前知道了起始rowid和终止rowid,以及第一行和第四行为操作结果。可以通过试算的方法获取到结果集合rowid

上面的操作演算过程,说明了两个问题:

位图索引是可以多索引共同合作操作的,不像B*树索引只有一个会加入结果集合;

位图索引的工作是通过位逻辑运算,非扫描操作;


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 姑妈穿裙子坐在我的腿的故事上 儿子18妈 妈38片国中 顶开高贵母亲的两辨 第章母亲抬腰迎合 母亲开始抗拒慢慢变迎合我口诉 母亲开始抗拒慢慢迎合我 第章顶开高贵母亲两瓣 母亲从抗拒慢慢变的迎合我 母亲疯狂迎合我txt小说下载 来吧儿子妈要你 影视片 儿子进来今晚妈让你做个够电影 儿子今晚妈让你做人个够知音网 离婚后和儿子睡觉 儿子让妈给你留个种吧 儿子妈要你的大吉吧 没开灯把小偷当老公 女儿怀孕我给姑爷解决问题 有给儿子口的吗 儿子你的真大 儿子想怎么弄就怎么弄吧 坏儿子还能在深点吗 睡着儿子顶了进来 儿子别急妈是你的小说 儿子今晚妈让你做人个够的视频 母亲和我做完跟父亲做在线阅读 高粱地里野坑头 明明有老公却想跟儿子 玉米地理日刘审一 玉米地理日刘审全集电影 玉米理日刘审 玉米地理日刘审全集 玉米地和娘亲的故事风雨 在玉米地插娘亲第1章 满仓与娘亲怀孕全文阅读 你不要命了你爸还没睡着 玉米地和娘亲故事会文 娘的身子能满足你吗 玉米地上了小翠 在玉米地插娘亲小说下载 在玉米地插娘亲目录 厨房撒下姑妈的裙子txt