来自MongoDB文档:MongoDB索引使用B树数据结构。
但是,它也适用于复合指数吗?在肯定的情况下,它如何实际实施?
PD:我想象的唯一方法是作为B树,其中每个节点都不具有单个值,而是与存储在数组中的索引一样多的值(例如,好像是两个二叉树(或多个二叉树,一个每个索引)已合并)。
我不能对 \xc2\xa0 实际实现有 100% 的确定性,但我确实认为复合索引也实现为 B 树,正如您所描述的,节点具有值序列(尊重索引键顺序) ),并且非常重要的是对键值使用字典顺序。
\n\n话虽如此,为了节省一些空间,我还会考虑 B 树,它仅使用与树顶部的第一个键关联的值,然后再使用第二个键的值,...... .以及靠近叶子的最后一个键的值。这无非是一种使节点边界与各个键重合的优化。
\n\n以这种方式实现复合索引(有或没有上述优化)的优点是,如果您在多个键上有索引,假设A 然后 B 然后 C ,那么您可以免费获得仅A上的索引,然后是A上的索引,然后是 B上的索引:事实上,由于字典顺序,键序列的任何前缀的所有值总是在这样的 B 树中分组在一起。
\n\n由于MongoDB记录了这种情况,所以我在使用MongoDB时就想到了这种复合索引的实现方式。
\n\n此外,文档指定复合索引禁止使用散列索引字段。这是又一条线索,因为 B 树实现了范围索引。
\n\n另外,我希望 MongoDB 的哈希索引使用哈希表而不是 B 树来实现,因为仅使用 B 树进行点查询(对数查找与 O(1) 相比)效率较低。
\n| 归档时间: |
|
| 查看次数: |
466 次 |
| 最近记录: |