mongodb 确保索引时添加_id?

bwitn5fc  于 2023-05-22  发布在  Go
关注(0)|答案(4)|浏览(173)

我正在使用Codeigniter(PHP)和MongoDB构建一个Web应用程序。我正在创建索引,有一个问题。
如果我查询三个字段(_id,status,type)并希望创建一个索引,那么在确保索引时是否需要包括_id:

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

还是这个到期了

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

6ljaweal1#

如果要将_id包含在复合索引中,则需要在ensureIndex调用中显式包含_id。但是由于_id过滤已经提供了对单个文档的选择性,所以很少有正确的做法。我认为只有在文档非常大并且试图使用覆盖索引的情况下才有意义。

svmlkihl

svmlkihl2#

MongoDB目前每个查询只使用一个索引,$or查询除外。如果您的常见查询总是在这三个字段(_id,status,type)上搜索,那么复合索引会很有帮助。
在DBshell中,可以对查询使用explain()命令来获取所用索引的信息。

tyu7yeag

tyu7yeag3#

_id是唯一的,默认情况下,索引是在_id字段上创建的。由于_id是唯一的,如果查询包含“_id”作为单个文档中的结果,则您永远不需要查询多个字段。
From:MongoDB documentation
Default _id Index MongoDB在创建集合时在_id字段上创建一个唯一索引。_id索引防止客户端插入两个_id字段值相同的文档。不能删除_id字段上的此索引。

moiiocjp

moiiocjp4#

你不需要隐式地在_id字段上创建索引,它是自动完成的。参见mongo documentation
_id索引
对于除capped集合之外的所有集合,将自动为_id字段创建索引。此索引是特殊的,无法删除。_id索引强制其键的唯一性(除了使用分片的某些情况)。

相关问题