复合索引使用哪种数据结构



从MongoDB文档:MongoDB索引使用B-树数据结构

但是,它也适用于复合指数吗?在肯定的情况下,它是如何实际执行的?

PD:我认为它的唯一方式是作为一个B树,其中每个节点没有一个值,而是有与存储在数组中的索引一样多的值(即,就好像两个二进制树(或多个,每个索引一个)已经合并)。

我不能对实际实现说任何100%确定的话,但我确实认为复合索引也被实现为B-树,正如你所描述的,节点具有值序列(遵循索引键顺序),并且非常重要的是,对键值使用字典顺序。

话虽如此,为了节省一些空间,我还考虑一个B树,它只使用与树顶部的第一个键相关的值,然后再往下一点的第二个键的值。。。以及最后一个接近叶子的键的值。这只不过是一种优化,使节点的边界与各个关键点一致。

以这种方式实现复合索引(有或没有上述优化)的优点是,如果你在几个键上有一个索引,比如说a然后B然后C,那么你可以免费获得a上的索引,免费获得a然后B的索引:事实上,键序列的任何前缀的所有值总是在这样的B树中分组在一起,因为词典的顺序。

由于MongoDB记录了这种情况,所以当我使用MongoDB时,我会这样考虑复合索引的实现。

此外,文档还规定,复合索引中禁止使用散列索引字段。这是另一条线索,因为B树实现了范围索引。

此外,我希望MongoDB的哈希索引使用哈希表而不是B树来实现,因为只将B树用于点查询(对数查找与O(1))

效率较低

最新更新