理解SAP BW 中的 Bit-Map Indexing

SAP BW 中一般的分析报表都是基于信息立方体的。信息立方体的事实表针对各个维度都有一个默认的索引,但是不同的维度的索引类型可能是不同的:大部分维度使用的都是Bit-Map索引, 这种索引对于低Cardinality的数据效率特别高。而对于高Cardinality的数据,Bit-Map的效率会大大降低,有时候索引甚至比数据更大。这个时候我们就要选择 Line Item 维度 或者High Cardinality 维度, 他们使用的是B-Tree索引。

Cardinality=(一列中相异值的数目)/(表的总记录数)

比如下面这张简单的表
X  Y
1  100
2  200
3  100
4  300
5  200

X列的Cardinality是1,而Y列的是3/5=0.6

那么这种索引对于低Cardinality的数据是如何实现高效率的呢?

建立BitMap索引

Bitmap索引首先会将表列的值转化为布尔值存储:1代表真,0代表假。
以下表为例:
X   Y             Z
1   100         FOO
2   200         BOO
3   100         BOO
4   300         ZOO
5   200         FOO

表中X为主键,Y, Z为非主键。所以我们可以为Y和Z列建立Bitmap索引。为了给Y列建立索引,首先我们要找到Y列的所有可能值:
Y
100
200
300

然后你问自己,对于100来说,从第一行开始知道最后一行,它是否存在于Y列,是就是1,否就是0. 这样你可以得到一个布尔数列,这个数列的位数等于表的记录数:
100: 1 0 1 0 0
或者这么看
X   Y             Z          Y(100)
1   100         FOO     1
2   200         BOO     0
3   100         BOO     1
4   300         ZOO     0
5   200         FOO     0

以此类推我们可以建立Y列的Bitmap索引:
X   Y             Z          Y(100)  Y(200)   Y(300)
1   100         FOO     1           0           0           
2   200         BOO     0           1           0
3   100         BOO     1           0           0
4   300         ZOO     0           0           1
5   200         FOO     0           1           0

即:
Y              Bitmap
100         10100
200         01001
300         00010

同理可得Z的索引:
Z           Bitmap
FOO      10001
BOO      01100
ZOO      00010

以上是Bitmap索引的生成原理。那么查询是怎么工作在Bitmap索引上面,Bitmap索引是如何提高查询的性能的呢?

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/119153/viewspace-626080/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/119153/viewspace-626080/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值