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

时间:2013-10-29 10:51:31

标签: mongodb

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

首先,下面是我的查询,它将对数据库进行查找并返回数据

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})

OR

创建2个单个索引和一个compund索引,如下所示,以提供上述查询

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大小,查询性能)

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

真的值得花时间探索解释方法并学会解释它的输出。