索引用于快速找到具有特定字段值的文档。没有索引,MySQL 必须从第一个文档开始,然后读取整个集合以找到相关字段。集合越大,这样做的成本越高。如果集合很大,并且对特定字段的查询很常见,那么考虑在文档中的特定字段上创建索引。
例如,以下查询在 Population 字段上创建索引后性能更好:
mysql-js> db.countryinfo.find("demographics.Population < 100")
...[output removed]
8 documents in set (0.00 sec)
The createIndex()
方法创建一个索引,可以使用 JSON 文档定义要使用的字段。该部分是索引的高级概述。有关更多信息,请参阅 索引集合。
要创建非唯一索引,请将索引名称和索引信息传递给 createIndex()
方法。重复的索引名称是禁止的。
以下示例指定了一个名为 popul
的索引,定义在 demographics
对象的 Population
字段上,索引为整数数值。最后一个参数指示字段是否需要 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})