#### 20.3.3.6 创建和删除索引

[](<>)

索引用于快速查找具有特定字段值的文档。如果没有索引，MySQL 必须从第一个文档开始，然后通读整个集合以查找相关字段。收藏品越大，成本越高。如果集合很大并且对特定字段的查询很常见，那么请考虑在文档内的特定字段上创建索引。

例如，以下查询使用 Population 字段上的索引执行得更好：

```
mysql-js> db.countryinfo.find("demographics.Population < 100")
...[output removed]
8 documents in set (0.00 sec)
```

这`创建索引（）`方法创建一个索引，您可以使用 JSON 文档定义该索引，该文档指定要使用的字段。本节是索引的高级概述。有关更多信息，请参阅[索引集合](https://dev.mysql.com/doc/x-devapi-userguide/en/collection-indexing.html).

##### 添加非唯一索引

[](<>)

要创建非唯一索引，请将索引名称和索引信息传递给`创建索引（）`方法。禁止使用重复的索引名称。

以下示例指定了一个名为`大众`，针对`人口`从领域`人口统计`对象，索引为`整数`数值。最后一个参数指示该字段是否需要`非空`约束。如果值为`错误的`, 该字段可以包含`空值`价值观。索引信息是一个 JSON 文档，其中包含要包含在索引中的一个或多个字段的详细信息。每个字段定义必须包含字段的完整文档路径，并指定字段的类型。

```
mysql-js> db.countryinfo.createIndex("popul", {fields:
[{field: '$.demographics.Population', type: 'INTEGER'}]})
```

此处，索引是使用整数数值创建的。更多选项可用，包括与 GeoJSON 数据一起使用的选项。你也可以指定索引的类型，这里已经省略了，因为默认类型“索引”是合适的。

##### 添加唯一索引

[](<>)

要创建唯一索引，请将索引名称、索引定义和索引类型“唯一”传递给`创建索引（）`方法。此示例显示在国家名称上创建的唯一索引 (`“姓名”`)，这是另一个常见的领域`国家信息`收集到索引。在索引字段描述中，`“文本（40）”`表示要索引的字符数，并且`“必需”：真`指定该字段必须存在于文档中。

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

##### 删除索引

[](<>)

要删除索引，请将要删除的索引的名称传递给`下降索引（）`方法。例如，您可以按如下方式删除“popul”索引：

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

##### 相关信息

-   看[索引集合](https://dev.mysql.com/doc/x-devapi-userguide/en/collection-indexing.html)了解更多信息。

-   看[定义索引](https://dev.mysql.com/doc/x-devapi-userguide/en/collection-indexing.html#collection-index-definitions)有关定义索引的 JSON 文档的更多信息。

-   看[馆藏索引管理功能](https://dev.mysql.com/doc/x-devapi-userguide/en/crud-ebnf-collection-index-management-functions.html)完整的语法定义。
