B-树索引与位图索引的比较

———————————————————————-
B-树(B-tree)索引                  |                位图索引
———————————————————————-
适合于high-cardinality列          |      适合于low-cardinality列
———————————————————————-
对关键字列的修改相对不算昂贵       |     对关键字列的修改非常昂贵
———————————————————————-
使用谓词AND/OR查询效率不高         |    使用谓词AND/OR查询效率高 
———————————————————————-
行一级的锁                         |      位图段一级的锁
———————————————————————-
较多的存储                         |         较少的存储
———————————————————————-
用于OLTP                           |        用于DSS
———————————————————————-

在这里:
low-cardinality:就是列的值可以枚举,例如性别和婚姻状况。
high-cardinality:列的值很难枚举,如人名等。

由于位图索引所需要的存储空间要比B-树索引小得多,因此,Oracle服务器在使用位图索引时将整个位图段装入内存,这实际上是将在一个磁盘上得搜索过程变成了一个内存查找过程,从而大大地提高了系统的效率。Oracle是用初始化参数文件中的参数
CREATE_BITMAP_AREA_SIZE来定义这个内存区的大小。默认值为8MB.

其中,在位图索引中修改键值列(索引列)需要段一级的锁。而B-树索引使用的是行一级的锁,还有在这种情况下可能要调整位图,因此在位图索引中对关键字列的修改是非常昂贵的。

综上:B-树索引可能更适合于联机事务处理(OLTP)系统,因为在OLTP系统中,DML操作比较频繁。而位图索引更适合与DSS系统,因为在数据仓库系统中表都比较大而且静态的并且查询比较复杂。

    原文作者:B树
    原文地址: https://blog.csdn.net/zhanggaokai/article/details/9332515
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞