B-Tree与Bitmap数据库索引

Luk*_*101 18 sql database oracle

有人可以解释位图和b树索引之间的差异.在什么情况下你会使用这两种?每种方法的优点/缺点是什么?

gpe*_*che 26

来自维基百科:B-Trees位图索引.用例:

  • B-Trees是CREATE INDEX ...在数据库中使用时的典型索引类型:

    1. 当您只选择索引数据的一小部分时(通常为5%-10%max),它们非常快
    2. 当你有很多不同的索引值时,它们会更好地工作.
    3. 可以组合几个B树索引,但更简单的方法通常更有效.
    4. 当索引数据的值很少时,或者想要获得较大(通常> 10%)的数据子集时,它们不起作用.
    5. 在索引表上插入/更新值时,每个B-Tree索引都会受到一个小的惩罚.如果在非常繁忙的表中有很多索引,这可能是一个问题.


    这种特性使得B-Tree索引对于加速OLTP应用程序中的搜索非常有用,当您一次处理非常小的数据集时,大多数查询按ID过滤,并且您希望获得良好的并发性能.

  • 位图索引是一种更专业的索引变体:

    1. 它们将索引值编码为位图,因此非常节省空间.
    2. 当几乎没有不同的索引值时,它们往往更好地工作
    3. 数据库优化器可以非常容易地组合多个位图索引,这样可以在查询中高效执行复杂的过滤器.
    4. 插入/更新值时效率非常低.


    位图索引主要用于数据仓库应用程序,其中除了ETL过程之外,数据库是只读的,并且您通常需要针对星型模式执行复杂查询,其中位图索引可以根据维度表中的条件加速过滤,通常没有太多不同的值.

作为一个非常简短的摘要:使用B-Tree索引(大多数数据库中的"默认"索引),除非您是数据仓库开发人员,并且知道您将受益于位图索引.