我查询了表单
db.coll.find({x: {$in: ['foo', 'bar', 'baz']}).sort({_id:-1}).limit(LIMIT)
“x”是单个ObjectId字段,_id也是ObjectId。有一个索引{x:1,_id:-1}。此查询应该是#SERVER-5063的快速路径。
大部分时间都这样做,除了一些罕见的实例表明执行全表扫描 - 这些查询的配置文件条目显示nscanned略高于匹配{x: {$in: ['foo', 'bar', 'baz']}}
的所有文档的计数。这通常比查询在预期情况下扫描的值高出3个数量级。
该集合相当重要,所以我的第一个猜测是,查询优化器可能正在重试各种查询计划,包括{_id:1}
索引,但是在添加.hint({x:1, _id:-1})
后仍然存在尖峰,所以我我不确定这里发生了什么。
任何人都可以解释偶尔扫描与查询匹配的所有文档以及如何预防它吗?
编辑:发生在MongoDB 2.4.4
上