在capped-collection上按反向插入顺序排序的最快方法是什么('rf'已被稀疏索引)
db.log.find({ rf : 'o-5556457634'}).sort({ '$natural' : -1 }).explain();
{
"cursor" : "ReverseCappedCursor",
"nscanned" : 1654468,
"nscannedObjects" : 1654468,
"n" : 4,
"millis" : 2932,
"nYields" : 5,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,
"indexBounds" : {
}
}
似乎'自然'绕过了索引('rf')字段的使用,显着减慢了查询速度 . 这是预期的预期行为吗?不应该在find / index之后计算'自然'排序吗?
没有“自然”类型:
db.log.find({ rf : 'o-5556457634'}).explain();
{
"cursor" : "BtreeCursor rf_1",
"nscanned" : 4,
"nscannedObjects" : 4,
"n" : 4,
"millis" : 0,
"nYields" : 0,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,
"indexBounds" : {
"rf" : [
[
"o-5556457634",
"o-5556457634"
]
]
}
提示确实强制引擎使用'rf'索引,但结果绕过(反向)'自然'排序
db.log.find({ rf : 'o-5556457634'}).sort({ '$natural' : -1 }).hint({rf :1}).explain();
{
"cursor" : "BtreeCursor rf_1",
"nscanned" : 4,
"nscannedObjects" : 4,
"n" : 4,
"scanAndOrder" : true,
"millis" : 0,
"nYields" : 0,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,
"indexBounds" : {
"rf" : [
[
"o-5556457634",
"o-5556457634"
]
]
}
}
2 回答
当你添加
sort
时,看起来查询优化器做错了 .您可以尝试将
.hint({rf :1})
添加到查询中以查看会发生什么吗?面对同样的问题,但找到了解决方案 . 你可以在你在find过滤器中提到的字段上创建索引,并添加“id”: - 1字段然后使用sort({“ id”: - 1}) . 帮助过我 .