22.3.3.6 创建和删除索引
索引用于快速找到具有特定字段值的文档。没有索引,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` 字段上,作为一个整数类型的值。最后一个参数指示该字段是否应要求 `NOT NULL` 约束。如果值为 `false`,该字段可以包含 `NULL` 值。索引信息是一个 JSON 文档,其中包含了要在索引中包括的一个或多个字段的详细信息。每个字段定义必须包括字段的完整文档路径,并指定字段的类型。
mysql-js> db.countryinfo.createIndex("popul", {fields:
[{field: '$.demographics.Population', type: 'INTEGER'}]})
在这里,索引是使用整数数字值创建的。还有其他选项可用,包括与GeoJSON数据一起使用的选项。你还可以指定索引类型,因为省略了这里的默认类型 “index” 是合适的。
要创建一个唯一索引,传递索引名称、索引定义和索引类型 “unique” 给 createIndex()
方法。这一例子展示了在国家信息集合 (countryinfo
) 上创建的唯一索引,它是基于国家名称 ("Name"
) 创建的。索引字段描述中,"TEXT(40)"
表示要索引的字符数,而 "required": True
指定该字段在文档中是必需的。
mysql-js> db.countryinfo.createIndex("name",
{"fields": [{"field": "$.Name", "type": "TEXT(40)", "required": true}], "unique": true})