0

假设我在 MongoDB 中存储了具有以下结构的对象:

Transaction
{
  _id
  userId
  accountId
}

并假设我有以下索引:

db.Transaction.ensureIndex({"userId": 1})

以下查询是否利用索引来最小化搜索时间?

db.Transaction.find( {userId: 'user1234', accountId: 'account1234'} );

也就是说,MongoDB 是否使用索引来“减少”结果userId,然后进行表扫描accountId

db.Transaction.find( {userId: 'user1234', accountId: 'account1234'} ).explain()
{
    "cursor" : "BtreeCursor userId_1",
    "nscanned" : 2,
    "nscannedObjects" : 2,
    "n" : 1,
    "millis" : 1,
    "nYields" : 0,
    "nChunkSkips" : 0,
    "isMultiKey" : false,
    "indexOnly" : false,
    "indexBounds" : {
            "userId" : [
                    [
                            "user1234",
                            "user1234"
                    ]
            ]
    }

看着explain()查询说BtreeCursor userId_1,所以我认为它让所有用户都使用userIdofuser1234然后扫描(仅有的两个项目)以找到accountIdof account1234- 这是正确的吗?

提前致谢。

4

1 回答 1

3

以下查询是否利用索引来最小化搜索时间?

是的,它确实。

查看查询的 explain() 说 BtreeCursor userId_1,所以我认为它获取了所有 userId 为 user1234 的用户,然后扫描以找到 account1234 的 accountId - 这是正确的吗?

是的,你是对的。浏览此处获取更多信息:

于 2012-08-17T23:03:44.340 回答