有人能解释一下位图索引和 b 树索引之间的区别吗?在什么情况下你会同时使用这两个?每个的优点/缺点是什么。
最佳答案
来自维基百科:B-Trees和 bitmap indexes .用例:
B 树是您在数据库中执行
CREATE INDEX ...
时使用的典型索引类型:- 当您只选择索引数据的一小部分(通常最多 5%-10%)时,它们非常快
- 当您有很多不同的索引值时,它们会更好地工作。
- 可以组合多个 B-Tree 索引,但更简单的方法通常更有效。
- 当索引数据的不同值很少,或者当您想要获取大量(通常 >10%)数据子集时,它们就没有用了。
- 在索引表上插入/更新值时,每个 B-Tree 索引都会施加一个小的惩罚。如果您在一个非常繁忙的表中有很多索引,这可能是个问题。
这种特性使 B-Tree 索引对于加快 OLTP 应用程序中的搜索非常有用,当您一次处理非常小的数据集时,大多数查询按 ID 过滤,并且您需要良好的并发性能。位图索引是一种更专业的索引变体:
- 它们将索引值编码为位图,因此非常节省空间。
- 当几乎没有不同的索引值时,它们往往会工作得更好
- 数据库优化器可以很容易地组合多个索引位图,这允许在查询中高效执行复杂的过滤器。
- 它们在插入/更新值时效率非常低。
位图索引主要用于数据仓库应用程序,其中数据库除了 ETL 进程外是只读的,并且您通常需要对 star schema 执行复杂的查询。 ,其中位图索引可以根据维度表中的条件加快过滤速度,这些维度表通常没有太多不同的值。
作为一个非常简短的总结:使用 B-Tree 索引(大多数数据库中的“默认”索引),除非您是数据仓库开发人员并且知道您将受益于位图索引。
关于sql - B-Tree 与 Bitmap 数据库索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9541541/