2

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

用户

  • _ID
  • 应用程序版本
  • 国家代码
  • facebook_id
  • 令牌
  • 用户身份
  • 设备ID

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

2.其他常见查询(30%)是 {_id, token}

3.其余(40%)是单独使用的查询: { _id} {device_id} {userid} {facebook_id}

我不知道如何管理它。我几乎可以肯定我需要在{_id:"1" , token:"1",device_id:"1"}上创建一个复合索引。我的问题是:

a)复合索引会优化第一种和第二种情况,对吗?

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

谢谢!

4

1 回答 1

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

当您在这些字段上有一个复合索引时,您还可以在单​​个字段上创建一个索引(例如,在类似tokenor的字段上device_id)。

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

于 2014-06-24T10:28:26.990 回答