部分MongoDB查询的索引是否提供任何好处?

时间:2012-08-17 21:46:29

标签: mongodb indexing

让我们假设我的对象存储在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,因此我假设所有用户都userId user1234,然后扫描(仅限两项)找到accountId的{​​{1}} - 这是正确的吗?

提前致谢。

1 个答案:

答案 0 :(得分:3)

  

以下查询是否利用索引的任何优势来最小化搜索时间?

是的,确实如此。

  

查看查询的解释()说BtreeCursor userId_1,所以我假设它获得user124的userId所有用户,然后扫描找到account1234的accountId - 这是正确的吗?

是的,你是对的。有关更多信息,请参见此处: