ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 理解SAP BW 中的 Bit-Map Indexing

理解SAP BW 中的 Bit-Map Indexing

原创 Linux操作系统 作者:wolfinflow 时间:2010-01-26 20:01:17 0 删除 编辑

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博客 ” ,链接:https://blog.itpub.net/119153/viewspace-626080/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2010-01-26

  • 博文量
    14
  • 访问量
    37940