有人可以解释位图和b树索引之间的差异。在什么情况下你会使用这两种?每种方法的优点/缺点是什么?
答案 0 :(得分:25)
来自维基百科:B-Trees和bitmap indexes。用例:
B-Trees是在数据库中执行CREATE INDEX ...
时使用的典型索引类型:
这种特性使得B-Tree索引对于加速OLTP应用程序中的搜索非常有用,当您一次处理非常小的数据集时,大多数查询按ID过滤,并且您希望获得良好的并发性能。 / p>
位图索引是一种更专业的索引变体:
位图索引主要用于数据仓库应用程序,其中除了ETL进程外,数据库是只读的,您通常需要针对star schema执行复杂查询,其中位图索引可以加速根据维度表中的条件进行过滤,这些条件通常没有太多不同的值。
作为一个非常简短的摘要:使用B-Tree索引(大多数数据库中的“默认”索引),除非您是数据仓库开发人员并且知道您将受益于位图索引。
答案 1 :(得分:0)
使用常规BTree索引时,所有列值均为空的行将从索引中排除。这意味着具有“列为空”条件的查询将不会从普通索引中受益。
现在,通过在(column_name,1)(或其他常数)上创建索引,可以将空值列包含在其中,从而使优化程序在执行“ is null”查询时可以使用该查询。
与B * Tree索引不同,位图索引自动包含空值。这意味着优化器可以在评估“ is null”谓词时使用位图索引。
位图索引可能会导致并发问题,可能会阻止同一表上的其他DML。因此,在OLTP应用中应避免这些情况。位图索引也需要企业版,因此使用这些索引可能会涉及许可问题。