确保索引时添加_id?

时间:2012-07-03 12:55:15

标签: mongodb

我正在使用Codeigniter(PHP)和MongoDB构建一个webapp。 我正在创建索引并有一个问题。

如果我在三个字段(_id,status,type)上查询并且想要 创建索引我需要在确保索引时包含_id:

db.comments.ensureIndex({_id: 1, status : 1, type : 1});

还是会到期?

db.comments.ensureIndex({status : 1, type : 1});

3 个答案:

答案 0 :(得分:4)

如果要将其包含在复合索引中,则需要在_id调用中明确包含ensureIndex。但是因为_id的过滤已经提供了单个文档的选择性,这很少是正确的事情。我认为只有当你的文件非常庞大并且你正试图使用​​covered indexes时才有意义。

答案 1 :(得分:3)

MongoDB目前仅使用one index per query,但$or查询除外。如果您的常见查询将始终搜索这三个字段(_id,status,type),那么复合索引将会有所帮助。

在DB shell中,您可以在查询中使用explain()命令来获取有关所用索引的信息。

答案 2 :(得分:-2)

您无需在_id字段上隐式创建索引,而是自动完成。请参阅mongo documentation

  

_id索引

     

对于除上限集合之外的所有集合,将自动为_id字段创建索引。此索引是特殊的,无法删除。 _id索引强制其键的唯一性(除了某些带分片的情况)。