sql - B-Tree 与 Bitmap 数据库索引

标签 sql database oracle

有人能解释一下位图索引和 b 树索引之间的区别吗?在什么情况下你会同时使用这两个?每个的优点/缺点是什么。

最佳答案

来自维基百科:B-Treesbitmap indexes .用例:

  • B 树是您在数据库中执行 CREATE INDEX ... 时使用的典型索引类型:

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


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

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

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


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

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

关于sql - B-Tree 与 Bitmap 数据库索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9541541/

相关文章:

mysql - 如何找到一个日历年的员 worker 数?

sql - 操作必须使用可更新查询/SQL - VBA

SQL-Server 聚合(Count)可能不会出现在 WHERE 中

database - 这是数据库中多语言数据的正确方法吗?

java - 无法在 debian 上运行 sqldeveloper

oracle - N 函数会导致现有查询出现问题吗?

java - 使用java建立app服务器和oracle数据库的连接

具有多个外键的 SQL 关系

Mysql InnoDB 崩溃

database - 如何更改oracle数据库进程的当前trace文件