索引用于快速查找具有特定字段值的文档。如果没有索引,MySQL 必须从第一个文档开始,然后读取整个集合以查找相关字段。集合越大,成本越高。如果集合很大,并且对特定字段的查询很常见,那么请考虑在文档内的特定字段上创建索引。
例如,以下查询在 Population 字段上进行索引后会执行得更好
mysql-js> db.countryinfo.find("demographics.Population < 100")
...[output removed]
8 documents in set (0.00 sec)
createIndex()
方法创建一个索引,您可以使用 JSON 文档定义该索引,该文档指定要使用的字段。本节是对索引的高级概述。有关更多信息,请参见 索引集合。
要创建非唯一索引,请将索引名称和索引信息传递给 createIndex()
方法。禁止重复索引名称。
以下示例指定了一个名为 popul
的索引,该索引针对 demographics
对象中的 Population
字段定义,索引为 Integer
数值。最后一个参数指示该字段是否应该要求 NOT NULL
约束。如果值为 false
,则该字段可以包含 NULL
值。索引信息是一个 JSON 文档,其中包含要包含在索引中的一个或多个字段的详细信息。每个字段定义必须包含该字段的完整文档路径,并指定该字段的类型。
mysql-js> db.countryinfo.createIndex("popul", {fields:
[{field: '$.demographics.Population', type: 'INTEGER'}]})
这里,索引是使用整数数值创建的。还有其他选项可用,包括用于 GeoJSON 数据的选项。您还可以指定索引类型,这里省略了,因为默认类型 “index” 是合适的。
要创建唯一索引,请将索引名称、索引定义和索引类型 “unique” 传递给 createIndex()
方法。此示例显示了在国家名称 ("Name"
) 上创建的唯一索引,这是 countryinfo
集合中要索引的另一个常见字段。在索引字段描述中,"TEXT(40)"
表示要索引的字符数,"required": True
指定该字段必须存在于文档中。
mysql-js> db.countryinfo.createIndex("name",
{"fields": [{"field": "$.Name", "type": "TEXT(40)", "required": true}], "unique": true})