我正在将书籍元数据,例如名称、作者、价格、出版社等存储在MongoDB文档中。我有大约1000万个这些文档,并且它们都在一个集合中。 平均文档大小为1.9KB。现在我已经在名称
,作者
和价格
上创建了索引。实际上,我的价格上有两个索引,一个按升序排列,一个按降序排列。我的mongodb版本是2.2.0,使用php驱动程序查询mongo。驱动程序的版本是1.12。但是,当我在价格范围内进行区间查询时,我收到了MongoCursorTimeoutException
异常。在我的查询中,我试图寻找价格在某一范围内的书籍,比如“价格低于1000,高于500”。
增加超时时间似乎不是一个好主意(已经是30秒了)。除此之外还能做什么来加快查询过程呢?
编辑
实际上我的价格索引是复合索引。我有一个状态字段,它有一个整数值,因此我的价格索引看起来像{price:-1,status:1}
和{price:1,status:1}
。
此外,我正在尝试使用PHP每次检索20个文档。
{price:-1,status:1}
和{price:1,status:1}
。 - loveshexplain
确保这两个索引都被使用。无论如何,拥有6GB的索引和8GB的RAM感觉太紧张了。 - JohnnyHKexplain
显示了"cursor" : "BtreeCursor price_-1_status_1"
,这意味着使用了复合索引,但 "isMultiKey" 的值为 false。你能告诉我原因吗? - loveshisMultiKey
是一个指示索引是否用于数组属性的标志,因此在这里应该为false。任何给定的查询只能使用一个索引,所以我并不是要暗示你应该检查它们是否都在这个特定的查询中使用。相反,我是想说在任何你期望索引有帮助的查询中进行检查。 - JohnnyHK