让我们假设我的对象存储在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}} - 这是正确的吗?
提前致谢。
答案 0 :(得分:3)
以下查询是否利用索引的任何优势来最小化搜索时间?
是的,确实如此。
查看查询的解释()说BtreeCursor userId_1,所以我假设它获得user124的userId所有用户,然后扫描找到account1234的accountId - 这是正确的吗?
是的,你是对的。有关更多信息,请参见此处: