位图索引(Bitmap Index)
来源:互联网 发布:java 加密压缩文件 编辑:程序博客网 时间:2024/05/22 03:48
使用位图向量记录对应行的取值情况不仅可以带来存储空间上的节省,而且可以借助计算机位图运算的快速特性来提高索引结果利用率。下面我们通过模拟情况来进行分析。
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*树索引只有一个会加入结果集合;
位图索引的工作是通过位逻辑运算,非扫描操作;
- 位图索引(Bitmap Index)
- 位图索引(bitmap index)
- 位图索引(Bitmap Index)
- 位图索引 Bitmap index
- 位图索引:原理(BitMap index)
- 位图索引(Bitmap Index)——索引共用
- 位图索引(Bitmap Index)——从B*树索引到位图索引
- Oracle编程艺术学习笔记-位图索引(bitmap index)
- 位图索引(bitmap index)冲突引起的TX锁争用
- 位图索引:原理(BitMap index)——浅显易懂
- bitmap join index 位图连接索引
- 位图索引(Bitmap Index)——位图索引与数据DML锁定
- 位图(BitMap)索引
- 位图(BitMap)索引
- 位图(BitMap)索引
- 位图(BitMap)索引
- 位图(BitMap)索引
- 位图(BitMap)索引
- 一个简单的显示图像程序(OpenCV)
- php 一个无限级数组返回完整的键值
- Android TabHost布局
- 习惯依赖的悲催
- FSBII(二)class CPicture : public CPictureHolder
- 位图索引(Bitmap Index)
- Red Hat Enterprise Linux 4 AS 下简单svnserve配置及使用 (svn version 1.1.4)
- 模拟淘宝网菜单选择
- 关于STEP7安装时需要注意的事情
- FSBII(三)class CPictureEx : public CStatic
- 根据ip地址确定国家的方法
- css简单属性
- Linux USB驱动框架分析(二)
- SSH分页