首页 > 编程知识 正文

bitmap位图(位图索引(Bitmap Index))

时间:2023-05-04 14:31:15 阅读:123513 作者:3628

位图索引区别于传统的B*树索引有两个结构特征。 一种情况是,叶节点上可能的索引列值对应于叶节点。 另一个指示在位图向量中与叶节点相对应的行是否取此索引值。 使用位图向量记录对应行的值不仅可以节约存储区域,而且可以利用计算机位图运算的快速特性提高索引结果的利用率。 用模拟分析一下吧。

http://www.Sina.com/http://www.Sina.com /模拟说明

假设有数据表t。 有两个数据列a和b,其值如下:

序列号

a

B

1

LL

1

2

t

2

3

LL

2

4

1

为两个数据列a和b分别创建名为idx_t_bita和idx_t_bitb的位图索引。 两个索引对应的存储逻辑结构如下:

Idx_t_bita索引结构。 对应于叶节点。

键值

开始rowid

退出rowid

位图

LL

xxx

ttt

1010

t

xxx

ttt

0100

xxx

ttt

0001

Idx_t_bitb索引结构。 对应于叶节点。

键值

开始rowid

退出rowid

位图

1

xxx

ttt

1001

2

xxx

ttt

0110

查询“select * fromtwhereb=1and (a=’l’ora=’m’)”

分析:位图索引的使用与B*索引有很大的不同。 B*索引的使用通常从根节点开始,依次通过分支节点与满足最近条件的叶节点进行比较。 在叶节点上的连续扫描操作“扫描”结果集合rowid。

位图索引的工作原理完全不同。 通过在不同的位图中直接取值的位运算(and或),取得结果集向量)计算结果)。

实例Bitmap可以拆分为以下操作:

1、a=’l’ora=’m’

a=L :矢量: 1010

a=M :矢量: 0001

or操作的结果是两个向量的或操作。 结果是1011。

2、合并b=1的向量

中间结果矢量: 1011

B=1:矢量: 1001

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

3、结果取得了rowid

现在知道开始rowid和结束rowid以及第1行和第4行的操作结果。 可以用估算的方法取得结果集合rowid

上述操作运算过程说明了两个问题。

位图索引可以组合使用多个索引,并且不像B*树索引那样添加到结果集中

位图索引的工作是位逻辑运算、非扫描操作

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。