mongodb中具有不同定义的多个索引

时间:2012-05-02 21:06:57

标签: mongodb indexing

问题是一个非常简单的问题,你可以在一个集合中拥有多个索引吗?我想你可以,但每次我搜索多个索引时,我都会对复合索引进行解释,这不是我想要的。

我想要做的就是确保我可以有两个简单的单独索引。 (我使用PHP,我将使用PHP代码格式,但我理解

db.posts.ensureIndex({ my_id1: 1 }, {unique: true, background: true});
db.posts.ensureIndex({ my_id2: 1 }, {background: true});

我一次只会搜索一个索引。

复合索引不是我想要的,因为:

  1. 一个索引是唯一的,另一个索引不是。

  2. 我认为这不是最快的选择。 (打开链接以了解我认为它会变慢的原因。link

  3. 我只是想确保索引能够正常工作。

1 个答案:

答案 0 :(得分:2)

您确定可以按照您拥有的方式定义索引。来自MongoDB documentation

有多少索引?索引通过密钥进行检索,包括有序的顺序检索,非常快。按键更新也更快,因为MongoDB可以非常快速地找到要更新的文档。但是,请记住,每个创建的索引都会为插入和删除添加一定的开销。除了将数据写入基本集合之外,还必须将密钥添加到B-Tree索引。因此,索引最适用于读取次数远远大于写入次数的集合。对于写密集的集合,索引在某些情况下可能适得其反。大多数集合都是读取密集型的,因此在大多数情况下索引是一件好事。

我还建议您在运行两个字段的查询时查看how Mongo will decide what index to use

另请查看他们的Indexing Advice and FAQ页面。它会解释only one index per queryselectivity等内容。

P.S。来自10gen的这个slideshare deck表明每个集合有40个索引的限制。