【问题标题】:MongoDb index reference to original tableMongoDb 索引对原始表的引用
【发布时间】:2021-07-04 12:48:28
【问题描述】:

我在测试 MongoDB 中的索引是如何工作的,一时搞不懂。

我有一个包含数据的测试集合(10000 行):

我还创建了新索引:

collection.createIndex({ SomeValue1: 1, SomeValue2: -1 })

而且我不明白索引如何将自己的条目映射到原始表。
我认为它使用了“_id”列,但是这两个查询告诉我这不是真的:


#1:

collection
.find()
.sort({ SomeValue1: 1, SomeValue2: -1 })
.projection({ SomeValue1: 1, SomeValue2: 1 })
.explain("allPlansExecution")

#2:

collection
.find()
.sort({ SomeValue1: 1, SomeValue2: -1 })
.projection({ SomeValue1: 1, SomeValue2: 1, _id: 0 })
.explain("allPlansExecution")

在 #1 查询执行计划说:

"totalKeysExamined": 10000,
"totalDocsExamined": 10000,

在#2:

"totalKeysExamined": 10000,
"totalDocsExamined": 0,

我原以为这两种变体都不使用原始表格。
在官方文档中找到此信息:link

但是如果它(索引表)不使用'_id'字段,仍然不明白如何索引条目匹配原始表中的条目?

【问题讨论】:

    标签: mongodb indexing mongodb-query


    【解决方案1】:

    Wired Tiger 的底层存储引擎是一个键值对存储。存储文档时,WiredTiger 会在内部分配一个标识符作为键,将文档作为值,并将其存储在类似于 B-Tree 的结构中。

    索引也是树,索引字段的键派生值,以及用作文档键的内部标识符的值。

    【讨论】:

    • 感谢您的回答!能否请您指点一下,我可以在哪里阅读更多关于 mongo 的内部实现和基础架构的信息?
    • WiredTiger 的内部结构过去在wiredtiger.com 上已经结束,但自从MongoDB 收购它们后,我不确定在哪里或是否可以再使用它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    • 2017-01-08
    • 2011-02-16
    相关资源
    最近更新 更多