OPTIONS
翻译或纠错本页面

创建一个索引

通过对 collection 中的文档建立对应的小而高效的索引项,索引可以帮助MongoDB快速的处理和匹配查询。用户可以在任意集合的 document 的任意键上创建索引。默认情况,MongoDB会在每个集合的 _id 键创建一个索引。

这篇文档描述了如何在一个键上创建索引。MongoDB还支持 复合索引 ,它可以索引多个键。参见 创建一个复合索引 来了解创建复合索引的教程。

在单一键上创建索引

您可以使用 ensureIndex() 方法或者其它相似的方法 method from your driver 创建索引。方法 ensureIndex() 不会创建重复索引,只会在具有相同索引明细(same specification)的索引不存在的情况下才会创建索引。

例如, 如下操作将会在 records 集合的 userid 键上建立一个索引:

db.records.ensureIndex( { userid: 1 } )

在索引明细中键的值描述了这个键的索引类型。例如,值 1 表明这个索引会将它的索引项按照升序排序。值``-1`` 表明索引会按照降序排布索引项。如果希望了解其他索引类型,请参见 索引类型.

被创建的索引可以用来支持对被索引键 userid 的查询,如下:

db.records.find( { userid: 2 } )
db.records.find( { userid: { $gt: 10 } } )

但是这个索引将不会支持如下对 profile_url 键的查询:

db.records.find( { profile_url: 2 } )

对于不能利用索引的查询,MongoDB必须扫描集合中的所有文档来找到匹配该查询的文档。

其他注意事项

虽然索引可以提升查询性能,索引同时也带来了一下操作上需要注意的问题。参见 索引的注意事项 了解详情。

如果您的集合中包含大量的数据,且您的应用需要在创建索引的过程中访问数据,请考虑在后台创建索引,如 后台创建 所述。参见 在复制集上创建索引 一节来了解更多关于在复制集上建立索引的信息。

注解

参见 在复制集上创建索引 了解如何在 replica set 上创建或者重建索引。

某些数据库驱动可能会在索引明细中使用 NumberLong(1) 而不是 1 。这对最终的索引没有影响。

参见

参见 创建一个复合索引, 索引教程索引概念 了解更多。