我有一个包含3个数字属性的复合_id:
_id":{"KeyA":0,"KeyB":0,"KeyC":0}
有问题的数据库具有200万个KeyA的相同值和KeyB的500k相同值的集群.
我的理解是我可以使用以下命令有效地查询KeyA和KeyB:
find( { "_id.KeyA" : 1, "_id.KeyB": 3 } ).limit(100)
Run Code Online (Sandbox Code Playgroud)
当我解释这个查询时,结果是:
"cursor" : "BasicCursor",
"nscanned" : 1000100,
"nscannedObjects" : 1000100,
"n" : 100,
"millis" : 1592,
"nYields" : 0,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,
"indexBounds" : {}
Run Code Online (Sandbox Code Playgroud)
没有limit(),结果是:
"cursor" : "BasicCursor",
"nscanned" : 2000000,
"nscannedObjects" : 2000000,
"n" : 500000,
"millis" : 3181,
"nYields" : 0,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,
"indexBounds" : {}
Run Code Online (Sandbox Code Playgroud)
据我所知,BasicCursor意味着索引已被忽略,并且两个查询都有很高的执行时间 - 即使我只需要100条记录需要大约1.5秒.我打算使用限制来实现分页,但这显然太慢了.
命令:
find( …Run Code Online (Sandbox Code Playgroud)