Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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 是合适的。

要创建一个唯一索引,传递索引名称、索引定义和索引类型 uniquecreateIndex() 方法。这一例子展示了在国家信息集合 (countryinfo) 上创建的唯一索引,它是基于国家名称 ("Name") 创建的。索引字段描述中,"TEXT(40)" 表示要索引的字符数,而 "required": True 指定该字段在文档中是必需的。

mysql-js> db.countryinfo.createIndex("name",
{"fields": [{"field": "$.Name", "type": "TEXT(40)", "required": true}], "unique": true})

要删除索引,传递要删除的索引名称给 dropIndex() 方法。例如,你可以这样删除 popul 索引:

mysql-js> db.countryinfo.dropIndex("popul")