B-Tree vs Bitmap 数据库索引
Posted
技术标签:
【中文标题】B-Tree vs Bitmap 数据库索引【英文标题】:B-Tree vs Bitmap database indexes 【发布时间】:2012-03-02 22:57:30 【问题描述】:谁能解释位图和b树索引之间的区别。在什么情况下你会使用这两种方法?每个人的优点/缺点是什么。
【问题讨论】:
不是作业,但我正在读一本关于 oracle 的书,并且真的不了解这两种类型的索引。必须学习 oracle 以使自己在办公室有用。 【参考方案1】:来自***:B-Trees 和 bitmap indexes。用例:
B-Trees 是在数据库中执行CREATE INDEX ...
时使用的典型索引类型:
- 当您只选择索引数据的一小部分(通常最大为 5%-10%)时,它们的速度非常快
此特性使 B-Tree 索引对于加速 OLTP 应用程序中的搜索非常有用,当您一次处理非常小的数据集时,大多数查询按 ID 过滤,并且您希望获得良好的并发性能。
位图索引是一种更专业的索引变体:
-
它们将索引值编码为位图,因此非常节省空间。
当不同的索引值很少时,它们往往会更好地工作
DB 优化器可以很容易地组合多个索引位图,这允许在查询中高效执行复杂的过滤器。
它们在插入/更新值时效率非常低。
位图索引主要用于数据仓库应用中,除了ETL过程之外,数据库是只读的,并且您通常需要针对star schema执行复杂的查询,其中位图索引可以加速基于过滤的维度表中的条件,这些条件通常没有太多不同的值。
作为一个非常简短的总结:使用 B-Tree 索引(大多数数据库中的“默认”索引),除非您是数据仓库开发人员并且知道您将从位图索引中受益。
【讨论】:
【参考方案2】:当使用普通的 BTree 索引时,所有列值为空的行都会从索引中排除。这意味着具有“列为空”条件的查询不会从普通索引中受益。
通过在 (column_name, 1)(或其他一些常量)上创建索引,现在包含空值列,允许优化器在执行“为空”查询时使用该查询。
与 B*Tree 索引不同,位图索引自动包含空值。这意味着优化器可以在评估“is null”谓词时使用位图索引。
位图索引可能会导致并发问题,但可能会阻塞同一张表上的其他 DML。因此,在 OLTP 应用程序中应该避免这些。位图索引也需要企业版,因此使用这些可能会涉及许可问题。
【讨论】:
以上是关于B-Tree vs Bitmap 数据库索引的主要内容,如果未能解决你的问题,请参考以下文章