- Indexes >
- 索引介绍
索引介绍¶
索引可以让 MongoDB中的查询执行更加高效。如果没有索引,MongoDB必须扫描集合中每一篇文档来选择符合查询条件的文档。这种 集合扫描 是低效的因为相比于对每步操作使用索引而言,全集扫描使得 mongod 要处理更多的数据量。
索引是一种特殊的数据结构 [1] ,它以一种易于遍历的格式保存了集合中数据集的小部分.一个索引会保存被索引的键或多个键的值,并按照值进行排序。
根本上来说,MongoDB中的索引和其它数据库系统中的索引是相似的。MongoDB在 集合 级别建立索引, 并支持对集合中文档的任意键或内嵌文档的键建立索引.
如果存在某个索引适用于当前查询,MongoDB可以使用该索引来减少查询过程中扫描的文档数。在某些情况下,MongoDB由索引中存储的数据就可以直接决定一篇文档是否和查询匹配。下图演示了一个查询使用索引来查找文档。
[1] | MongoDB中的索引使用B-tree数据结构来存储。 |
索引类型。¶
MongoDB提供了一些不同类型的索引来支持特定类型的数据和查询。
默认 _id¶
MongoDB中所有的集合都会对默认存在的 _id 建立索引。如果应用在存储的时候没有指定 _id 值,那么数据库驱动或者 mongod 将会自动创建一个 ObjectId 值作为 _id。
The _id index is unique, and prevents clients from inserting two documents with the same value for the _id field.
复合索引¶
MongoDB 也 支持用户对多个键建立自定义索引。这些 复合索引 就像单键索引一样;不同的是 ,查询可以基于多个键来选择文档。在符合索引中的键的顺序很重要。比如说,如果一个复合索引是这样: { userid: 1, score: -1 } ,那么索引首先会基于 userid 的值对文档排序,然后对于相同 userid 的文档,再按照 score 排序。以下是复合索引的示例:
多键索引¶
MongoDB使用 多键索引 来索引数组中的内容。如果您基于一个指向数组的键创建索引,那么MongoDB将会对数组中 每个 元素分别建立一条索引项。 多键索引 可以让查询通过匹配数组中元素内容的方式来选择文档。如果一个被索引键的值是一个数组,MongoDB可以自动的创建多键索引,不需要显式的指定。
以下是多键索引的示例:
地理空间索引¶
为了高效地查询地理坐标数据,MongoDB提供了两种特殊的索引: 二维索引 (使用平面几何返回结果) 和 二维球面索引 (使用球面几何返回结果)。
点击阅读 2d 索引原理 更深入了解地理空间索引。