1

这是一个有点奇怪的。我正在遍历一个相当大的数据库,使用检查某些元素是否存在的查询。在没有提示的情况下在数据库中运行此查询大约需要 137 秒,但有提示它会下降到 0(这是 obv 更可取的)。通过 php 使用它时

$collection->find($params)->hint(array("responses" => 1))->count();

并分析我得到的查询:

{“ts”:ISODate(“2012-05-08T10:11:24.682Z”),“op”:“command”,“ns”:“ey_gsat.$cmd”,“command”:{“count”:“调查答案”,“查询”:{“responses.93”:{“$exists”:true},“responses.96”:{“$exists”:true},“responses.99”:{“$exists”:真},“responses.102”:{“$exists”:真},“responses.105”:{“$exists”:真},“responses.108”:{“$exists”:真},“responses .111" : { "$exists" : true }, "responses.114" : { "$exists" : true }, "responses.117" : { "$exists" : true }, "responses.120" : { "$exists" : 真 }, "response.1":{"$exists":true}}},"ntoreturn":1,"responseLength":48,"millis":137,"client":"127.0.0.1","user":"" }

通过 php 运行时,没有任何查询实际使用索引的迹象。我在这个站点上运行了很多这样的查询,所以 137 毫秒加起来,这就是我想优化它们的原因。任何想法可能有什么问题?

4

1 回答 1

1

这是一个已知的计数限制:https ://jira.mongodb.org/browse/SERVER-2677 。您可能想关注/投票支持该问题。不幸的是,没有解决方法。您可能希望尽可能缓存计数或估计总数。

于 2012-05-08T19:10:50.457 回答