Mongodb - 复合指数覆盖单个索引吗?

时间:2015-09-18 14:48:59

标签: mongodb

我有一个名为user的集合,有三个属性

  • 名称
  • 电子邮件
  • 邮政编码

在我的代码中,我执行单一复合查询,如下所示:

db.user.find({'email': <some_email>, 'zipcode': <some_zipcode>})
db.user.find({'email': <some_email>)

我的问题是,如果我在电子邮件和邮政编码上添加复合索引,是否还需要在电子邮件中添加单个索引?我不确定复合指数是否涵盖两种情况。感谢。

2 个答案:

答案 0 :(得分:0)

复合指数不涵盖两种情况。如果没有在电子邮件中添加单个索引,那么我有这样的记录,它具有相同的电子邮件:

{'email':'gg@gg.com', 'zipcode':'ABC123'}
{'email':'gg@gg.com', 'zipcode':'ABC124'}

在电子邮件中使用单个索引会阻止集合中的上述记录

答案 1 :(得分:0)

是的,复合索引可用于两个查询。 然而 ,这取决于您如何建立复合索引;意识到索引中的字段顺序很重要。

如果您想要执行这两个查询:

db.user.find({'email': <some_email>, 'zipcode': <some_zipcode>})
db.user.find({'email': <some_email>)

然后,在建立索引时,首先要使用email字段创建复合索引,这一点非常重要。

例如:

db.users.createIndex({
    "email" : 1,
    "stock" : 1
})

这将允许db.user.find({'email': <some_email>)利用复合索引,因为email字段是索引前缀;换句话说,该字段位于索引字段的开头。

阅读复合指数Prefixes以更好地理解这一概念。

另外,有关复合索引的更多信息,请参阅MongoDB的Compound Indexes