与btree索引相比,位图索引如何加快查询速度?

时间:2016-06-28 08:32:52

标签: database oracle indexing bitmap-index

我认为通过让您了解我如何理解Btree指数如何从根本上发挥作用,您将更好地了解我的来源。我不是DBA,我问这个问题是一个对数据结构有基本了解的外行。

索引的基本思想是通过在搜索数据库时跳过大量记录来加速搜索。

AFAIK,我认为Btree索引所基于的二叉树数据结构,可以帮助我们在不扫描整个数据库的情况下通过将数据划分为节点进行搜索。对于过于简化的示例,从A到M开始的单词存储在左节点中,以N到Z开头的单词存储在树的第一级右侧节点中。在这种情况下,当我们搜索单词“Jackfruit”时,它只会在左侧节点上搜索跳过正确的节点,从而节省了大量的时间和IO。

从这个意义上说,位图索引如何让我们在搜索时不扫描整个数据库?如果没有,它如何加快搜索速度?或者它只是用于压缩?

enter image description here

取自here

的图片

上图是位图的概念图。使用该结构,DB如何查找行?它会扫描所有行吗?在二叉树中,您不必扫描所有内容的事实正是它如何帮助加快搜索速度。我没有看到任何解释,如果数据库在使用位图搜索行时有什么优势,而不是位图占用的空间更少。

2 个答案:

答案 0 :(得分:0)

Btree索引适用于密钥搜索(允许重复,但主要是列中的不同值,即SSN)。如果您有一些不同的值,如“性别”,“状态”,“颜色”等,则位图索引会更好。

答案 1 :(得分:0)

Oracle位图索引与标准b树索引非常不同。在位图结构中,为索引表中的每一行创建一个二维数组,其中一列。每列代表位图索引中的不同值。这个二维数组表示索引中的每个值乘以表中的行数。

请参阅http://www.dba-oracle.com/oracle_tips_bitmapped_indexes.htm以获取更详细的说明。