Mongodb 如何为对某些字段进行排序的查询创建索引?

Mongodb 如何为对某些字段进行排序的查询创建索引?,mongodb,Mongodb,我们在应用程序中使用Mongodb 我有一个关于在集合上创建索引的查询 下面首先是我的查询,它将在DB上查找并返回数据 db.mycollection.find({ symbol: "UGHNG", date: "2013-11-08", mainsymbol: "HIJ" }).sort( { "price": 1,"surv": 1} ).pretty() 从上面的查询中可以看到,有两个字段price和surv仅用于排序 为上述内容创建索引的最佳方法是什么 创建包含上述查询的每个字段的复合

我们在应用程序中使用Mongodb 我有一个关于在集合上创建索引的查询

下面首先是我的查询,它将在DB上查找并返回数据

db.mycollection.find({ symbol: "UGHNG", date: "2013-11-08", mainsymbol: "HIJ" }).sort( { "price": 1,"surv": 1} ).pretty()
从上面的查询中可以看到,有两个字段price和surv仅用于排序

为上述内容创建索引的最佳方法是什么

创建包含上述查询的每个字段的复合索引

db.mycollection.ensureIndex({"symbol":1,"date":1,"mainsymbol":1,"price":1,"surv":1},{"unique" : false})

创建两个单索引和一个计算索引,如下所示,以服务于上述查询

db.mycollection.ensureIndex({"price" : 1}, {"unique" : false})
db.mycollection.ensureIndex({"surv" : 1}, {"unique" : true})
db.mycollection.ensureIndex({"symbol":1,"date":1,"mainsymbol":1},{"unique" : false})

请分享您的观点,从各个方面(RAM大小、查询性能)处理这一问题的最佳方法是什么?

除非您的查询只需要使用
price
surv
中的一个,否则我认为复合索引应该做得最好。

最好的方法是使用。explain()

这将让您知道每个版本的索引完成了多少工作


探索explain方法并学习解释其输出是非常值得的。

每个查询仍然只有一个索引,直到我看不出第二个选项的意义。嘿,我不明白你说的“除非你的查询只需要使用price和surv中的一个”是什么意思??