由位图索引bitmap(一):基本概念可知,传统位图索引技术最大的局限性主要表现在,高基数列的索引尺寸过大从而影响查询性能。所以,从控制索引大小和减少查询响应时间这两个出发点,业内的优化策略一般从以下三个角度切入:分桶(binning)、编码(encoding)和压缩(compression)。而在实际的使用场景中,这三种优化策略一般会结合使用。
分桶策略,即采用“桶”将distinctkey合并为多个区间,压缩distinct key值的数量,从而缩减位图索引的大小。传统位图索引中的分桶策略默认采用的是等宽分桶(equal-width binning),如图2.4所示,我们将区间[0,1]划分为四个桶,分别为[0,0.25),[0.25,0.5),[0.5,0.75),[0.75,1),而每一个distinct key对应唯一的bin ID,从而将8个distinct key缩减为4个bin ID。
编码策略相对于分桶策略来说,在减少位图索引数量的基础上,又能够减少在查询过程中所访问的位图索引的个数。常见的编码策略有四种:二进制编码(binary encoding,BN)、等值编码(equality encoding,E1)、范围编码(range encoding)、区间编码(interval encoding),如图2.6所示。其中,二进制编码思想不再赘述;等值编码与等宽分桶思想一致,适用于精确查找,但索引尺寸较大,适用于distinct key值较少的情况;范围编码保留单侧区间,形如(X≤2),适用于one-sided range query场景,对于双侧范围的查询则需要再对相关列对应的位图索引作异或(XOR)操作;区间编码保留双侧区间,形如(1≤X≤2),适用于two-sided range query场景。
那么,为什么说编码策略还能够减少在查询过程中所访问的位图索引个数。主要是充分利用了不同编码策略的特性。比如,查询“X≤2”,如果使用等值编码(equality encoding),那么我们需要对e0、e1、e2这三列对应的位图索引做或(OR)操作,从而获得查询结果;但是如果我们使用范围编码(range encoding),直接返回γ2列即可。
同时,在这四种编码策略的基础上,我们通过组合形成更为复杂的编码方式,从而应对各种复杂的查询场景。下面我们简单介绍下基于以上四种基础编码方式衍生出来的两类高级编码方式:多要素编码(multi-component encoding)和多层次编码(multi-level encoding)。其中,多要素编码的核心思想与二进制编码基本一致,不过最主要的区别在于每个要素都可以独立确定基数;而多层次编码则使用多级分桶策略思想,其中,distinct keys按照不同的粒度划分为不同层级的“桶”,每层桶都使用独立的编码策略,内层最细粒度的桶采用等值编码策略,从而根据不同的查询需求,使用不同层次粒度的桶与编码策略,加速整个查询过程。
常见的多层编码策略一般使用两层,外层采用基础的三种编码策略:等值、范围与区间编码,内层我们则统一采用等值编码策略,目的依然是为了解决高精度下“candidate check”问题,那么对应的二层编码策略则有三种:二层等值编码(two-level equality-equality encoding,EE)、二层范围-等值编码(two-level range-equality encoding,RE)、二层区间-等值编码(two-level interval-equality encoding,IE)。
在位图索引中,每一个bitmap往往都包含了大量的“0”,这个特性使其非常适合压缩。一个好的位图索引压缩算法需要达到两个目标:(1)提高按位逻辑操作的速率;(2)减少查询响应时间。所以业内的研究主要集中于“行程长度压缩编码(Run-Length Encoding,RLE)”与“差分压缩编码(Delta-Encoding,DE)”算法。其中,RLE的主要思想是将连续多个相同的数值压缩成“数量 x 数值”的形式,例如:000000->6(*)0;而DE的主要思想是将存储一个序列中的plain data转换为存储此序列中数据间的差值,例如:2, 4, 6, 9, 7->2, 2, 2, 3, −2;而存储的差值又可以使用RLE算法进一步压缩。
目前,常用的位图索引压缩算法有以下两类:字节对齐位图编码(Byte-aligned Bitmap Code, BBC)和字对齐位图编码(Word-aligned Bitmap Code, WBC),其中BBC算法应用于Oracle数据库的位图索引中,并受知识产权保护;而WBC则衍生出众多编码方式:Word-Aligned Hybrid (WAH),PartitionedWord-Aligned Hybrid (PWAH),Position List Word-Aligned Hybrid (PLWAH),Enhanced Word-Aligned Hybrid (EWAH)等。