如果每个属性都在mongodb集合中编入索引,我是否需要复合索引?

时间:2013-06-26 11:06:51

标签: mongodb mongodb-indexes

假设我在mongo数据库中有一个包含以下文档的集合

{
    "name" : "abc",
    "email": "abc@xyz.com",
    "phone" : "+91 1234567890"
}

该集合包含大量对象(一百万左右),除了定期向此集合添加对象外,我的应用程序还会对此数据执行一些不同类型的查找。

一种方法使用所有三个属性(名称,电子邮件和电话)进行查找,因此我可以为这三个字段创建一个复合索引,以确保此查找非常有效。

db.mycollection.ensureIndex({name:1,email:1,phone:1})

现在,我的应用程序中还有一些方法可以获取具有相同名称的所有对象(我知道这个例子很糟糕)。所以我需要一个名称字段的索引。

db.mycollection.ensureIndex({name:1})

渐渐地,我的应用程序发展到了我必须索引其他字段的程度。

现在,我的问题。如果我将每个属性单独编入索引,那么维护所有三个属性(或两个属性)的复合索引是否仍然有意义?

显然,这是一个不好的例子......如果我正在制作一个集合来存储一个人的多个联系信息,我会使用数组。但是,这个问题纯粹是关于指数。

2 个答案:

答案 0 :(得分:0)

这取决于您的疑问。

如果您正在进行查询,例如:

db.mycollection.find({"name": "abc", email: "abc@xyz.com", phone: "+91 1234567890"});

然后综合指数将是最有效的。

答案 1 :(得分:0)

为了完成而回答我自己的问题:
复合索引并不意味着每个单独的属性都被索引,只有复合索引中的第一个属性可以在查找中单独使用。我们的想法是实现平衡和优化查询,因为太多的索引会增加磁盘存储和插入时间。