我有一个包含30个mongoid的数组,这是我的代码,
$rest = $m->cart->res->find(array("_id" => array('$in' => $restin["e"])))->limit(30)->explain();
_id字段是自然索引的,但我得到的结果就像从未编入索引,这是我的解释结果,
[cursor] => BtreeCursor _id_ multi
[isMultiKey] =>
[n] => 30
[nscannedObjects] => 30
[nscanned] => 43
[nscannedObjectsAllPlans] => 30
[nscannedAllPlans] => 43
[scanAndOrder] =>
[indexOnly] =>
[nYields] => 0
[nChunkSkips] => 0
[millis] => 0
[indexBounds] => Array
我不明白的部分是,为什么mongodb会搜索43个文件?,只有30个索引的mongoids,nscanned应该是30,我该如何解决?
答案 0 :(得分:3)
特别注意它所涉及的部分 COVERED INDEX 。您的上一个响应是一个覆盖索引(因为您只预测id:1),并且它在任何情况下都基于他们的文档看起来很正常。
<强> nscannedObjects 强>
指定查询期间扫描的文档总数。 nscannedObjects可能低于nscanned,例如索引是覆盖索引。
<强> nscanned 强>
指定在数据库操作期间扫描的文档或索引条目的总数。您希望n和nscanned尽可能接近值。 nscanned值可能高于nscannedObjects值,例如,如果索引是覆盖索引。