我有一个名为"记录"拥有数以千万计的文件。它有以下索引:
{
"v" : 2,
"key" : {
"added_on" : -1,
"instance" : 1,
"invisible" : -1,
"reviewed" : -1
},
"name" : "added_on_index",
"ns" : "test.records"
},
我正在尝试执行以下功能,该功能会尝试确定未审核的最旧记录。
$collection = $this->mongo->getCollection('records');
$cursor = $collection->find(array('instance' => $instance, 'reviewed' => false), array('added_on' => 1))->sort(array('added_on' => 1))->limit(1);
我可能错了,但我在书中读到了我已经学会了MongoDB这应该有用 - 在进行排序时使用排序字段作为索引的第一个字段。
但是,选择不同的索引作为获胜计划:
[winningPlan] => Array
(
[stage] => PROJECTION
[transformBy] => Array
(
[added_on] => 1
)
[inputStage] => Array
(
[stage] => SORT
[sortPattern] => Array
(
[added_on] => 1
)
[limitAmount] => 1
[inputStage] => Array
(
[stage] => SORT_KEY_GENERATOR
[inputStage] => Array
(
[stage] => FETCH
[inputStage] => Array
(
[stage] => IXSCAN
[keyPattern] => Array
(
[instance] => 1
[invisible] => 1
[reviewed] => 1
)
[indexName] => module_record_retrieval
[isMultiKey] =>
[multiKeyPaths] => Array
(
[instance] => Array
(
)
[invisible] => Array
(
)
[reviewed] => Array
(
)
)
[isUnique] =>
[isSparse] =>
[isPartial] =>
[indexVersion] => 2
[direction] => forward
[indexBounds] => Array
(
[instance] => Array
(
[0] => [ObjectId('58b28de67289ba94352c90bd'), ObjectId('58b28de67289ba94352c90bd')]
)
[invisible] => Array
(
[0] => [MinKey, MaxKey]
)
[reviewed] => Array
(
[0] => [false, false]
)
)
)
)
)
)
)
当尝试向find函数添加提示(' added_on_index')时,即使是$ cursor-> explain()也会因为看起来很长时间而停滞不前。 任何帮助解决这个问题都将不胜感激。