0

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

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

该集合有很多对象(一百万左右),我的应用程序除了定期向该集合添加对象外,还对这些数据进行了几种不同类型的查找。

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

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

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

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

渐渐地,我的应用程序增长到必须索引其他字段的地步。

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

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

4

2 回答 2

0

这取决于您的查询。

如果您正在执行以下查询:

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

那么复合索引将是最有效的。

于 2013-06-26T11:24:55.187 回答
0

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

于 2013-07-03T05:46:46.310 回答