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