假设我在mongo数据库中有一个包含以下文档的集合
{
"name" : "abc",
"email": "abc@xyz.com",
"phone" : "+91 1234567890"
}
该集合包含大量对象(一百万左右),除了定期向此集合添加对象外,我的应用程序还会对此数据执行一些不同类型的查找。
一种方法使用所有三个属性(名称,电子邮件和电话)进行查找,因此我可以为这三个字段创建一个复合索引,以确保此查找非常有效。
db.mycollection.ensureIndex({name:1,email:1,phone:1})
现在,我的应用程序中还有一些方法可以获取具有相同名称的所有对象(我知道这个例子很糟糕)。所以我需要一个名称字段的索引。
db.mycollection.ensureIndex({name:1})
渐渐地,我的应用程序发展到了我必须索引其他字段的程度。
现在,我的问题。如果我将每个属性单独编入索引,那么维护所有三个属性(或两个属性)的复合索引是否仍然有意义?
显然,这是一个不好的例子......如果我正在制作一个集合来存储一个人的多个联系信息,我会使用数组。但是,这个问题纯粹是关于指数。
答案 0 :(得分:0)
这取决于您的疑问。
如果您正在进行查询,例如:
db.mycollection.find({"name": "abc", email: "abc@xyz.com", phone: "+91 1234567890"});
然后综合指数将是最有效的。
答案 1 :(得分:0)
为了完成而回答我自己的问题:
复合索引并不意味着每个单独的属性都被索引,只有复合索引中的第一个属性可以在查找中单独使用。我们的想法是实现平衡和优化查询,因为太多的索引会增加磁盘存储和插入时间。