MongoDB索引,是否可以创建普通和&复合同时?

时间:2014-06-24 10:17:12

标签: mongodb indexing compound-index nosql

我必须为MongoDb集合创建索引:

用户

  • _id
  • APP_VERSION
  • COUNTRYCODE
  • facebook_id
  • 令牌
  • 用户ID
  • DEVICE_ID

1. 30%的查询是      {_ id,token,device_id}

2.其他常见问题(30%)是      {_ id,token}

3.其余(40%)是单独使用的查询:     的 {_ ID}     的 {DEVICE_ID}     的 {用户ID}     的 {facebook_id}

我不知道如何管理它。 我几乎可以肯定我需要在 {_ id:“1”,令牌:“1”,device_id:“1”} 上创建复合索引。 我的问题是:

a)复合指数是否会优化第一种和第二种情况,对吗?

b)我应该如何处理案例3?为每个字段创建索引?

谢谢!

1 个答案:

答案 0 :(得分:1)

是的,可以在字段上创建复合索引并单独索引这些字段。

如果您创建这样的复合索引:

db.coll.ensureIndex({_id : 1, token : 1,device_id: 1}); 

此索引将支持对索引字段的前缀进行查询: 复合索引将支持以下任务:

db.coll.find({ _id : ObjectId(....), token : "foo"});
db.coll.find({ _id : ObjectId(....), token : "foo", device_id: 12345});

如果您在这些字段上有复合索引,您还可以在单​​个字段上创建索引(例如,在tokendevice_id等字段上)。

正如Sammaye在评论中所说。最后一种情况可能需要device_iduseridfacebook_id字段上的3个单独索引(默认情况下会创建_id字段上的唯一索引,因此您不必需要创建它。)