3

我试图弄清楚按 _id 字段按降序排序是否利用了系统自动创建的索引。我试图使用 explain() 来解决这个问题,但我不确定。我应该按降序在 _id 上创建一个附加索引以更快地恢复数据吗?

> db.foo.insert({ name: 'foo' });
> db.foo.insert({ name: 'bar' });
> db.foo.find();
{“_id”:ObjectId(“5142d30ca4a8b347cb678c1a”),“名称”:“foo”}
{“_id”:ObjectId(“5142d310a4a8b347cb678c1b”),“名称”:“酒吧”}
> db.foo.find().sort({ _id: -1 });
{“_id”:ObjectId(“5142d310a4a8b347cb678c1b”),“名称”:“酒吧”}
{“_id”:ObjectId(“5142d30ca4a8b347cb678c1a”),“名称”:“foo”}
> db.foo.find().sort({ _id: -1 }).explain();
{
    "cursor" : "BtreeCursor _id_ reverse",
    “isMultiKey”:假,
    “n”:2,
    “nscannedObjects”:2,
    “nscanned”:2,
    “nscannedObjectsAllPlans”:2,
    “nscannedAllPlans”:2,
    “scanAndOrder”:假,
    “indexOnly”:假,
    “nYields”:0,
    “nChunkSkips”:0,
    “毫”:0,
    “索引边界”:{
        “_ID” : [
            [
                {
                    “$ 最大元素”:1
                },
                {
                    “$minElement”:1
                }
            ]
        ]
    },
    “服务器”:“本地主机:27017”
}
4

1 回答 1

5

_id由于属性下的第一行,说明确实提供了一个很好的指标,说明它是否能够反向使用默认索引cursorBtreeCursor _id_ reverse

表明BtreeCursor它是一个使用索引的游标,而_id_ reverse表明它正在_id_反向使用索引。

从所有意图和目的来看,它应该_id正确地反向使用索引。

另外,MongoDB 还没有索引交集(https://jira.mongodb.org/browse/SERVER-3071),这意味着它仍然(对于大多数查询)为条件和排序使用单个索引因此,如果您希望使用查找条件,您会发现您可能还需要_id在未来的索引中包含。

于 2013-03-15T08:48:18.553 回答