本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
复合索引
复合索引存储来自文档集合中两个或更多字段的信息,允许对第一个字段或任何前缀字段进行查询。这些索引优化了同时筛选多个字段或将筛选与排序操作相结合的查询的性能。它们对最左边的索引字段的单条件查询也很有效。数据库利用这些索引条目来高效地定位匹配的文档,而无需执行完整的馆藏扫描。
在以下情况下,复合字段索引很有用:
-
你需要同时筛选多个字段。
-
您需要将筛选与排序操作相结合。
支持的索引属性
| Option | 3.6 | 4.0 | 5.0 | 8.0 | 弹性集群 |
|---|---|---|---|---|---|
| name | 支持 | 是 | 是 | 是 | 是 |
| 独特 | 支持 | 是 | 是 | 是 | 是 |
| 稀疏* | 支持 | 是 | 是 | 是 | 是 |
| 局部的 FilterExpression * | 否 | 否 | 是 | 是 | 否 |
* sparse 和partialFilterExpression选项不能在同一个索引定义中一起使用。如果你尝试使用这些选项创建索引,它将失败并出现以下错误:
Error in specification: cannot mix partialFilterExpression and sparse options
创建复合索引
使用该createIndex()方法创建复合索引。该方法的语法是:db.collection.createIndex(<keys>, <options>)
该keys参数是一个 JSON 文档,用于指定字段和索引排序顺序:
{ "<field 1>": <1 (ascending)|-1 (descending)>, "<field 2>": <1 (ascending)|-1 (descending)>, ... }
请注意,复合索引中只有一个字段可以是数组。如果你尝试在两个或更多数组字段上创建复合索引,它将失败并出现以下错误:
multiple fields of compound index cannot be arrays
该options参数是一个 JSON 文档,用于指定索引的选项:
{ "name": "<name>", "unique": <true | false>, "sparse": <true | false>, "partialFilterExpression": <filter expression> }
有关创建复合索引的示例,请参见索引属性。