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.4.3.6 创建和删除索引

索引用于快速找到具有特定字段值的文档。没有索引,MySQL 必须从第一个文档开始,然后逐个读取整个集合来找到相关字段。当集合很大时,这种做法越来越昂贵。如果集合很大,并且对某个字段进行常见查询,那么考虑在特定字段上创建索引。

例如,以下查询在 Population 字段上创建索引会更快:

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

`create_`方法创建了一个可以用 JSON 文档定义的索引,该文档指定要使用的字段。这一节是对索引的高级概述。对于更多信息,请参阅索引集合

要创建一个非唯一索引,请将索引名称和索引信息传递给 `create_`方法。重复的索引名称是禁止的。

以下示例指定了名为 `popul` 的索引,它定义在 `demographics` 对象中的 `Population` 字段上,作为一个整数数字值。最后一个参数指示该字段是否应要求 `NOT NULL` 约束。如果值为 `false`,则该字段可以包含 `NULL` 值。索引信息是一个 JSON 文档,其中包含了要在索引中包括的一个或多个字段的详细信息。每个字段定义必须包括到字段的完整文档路径,并指定字段的类型。

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

这里,索引使用整数数字值创建。还有其他可用的选项,包括与 GeoJSON 数据一起使用的选项。你还可以指定索引的类型,这里省略了,因为默认类型 `index` 适用于这里的情况。

要创建一个唯一索引,请将索引名称、索引定义和类型 `unique` 传递给 `create_`方法。这个例子展示了在 `countryinfo` 集合中常见字段 `Name` 上创建的唯一索引。在索引字段描述中,`"TEXT(40)"` 表示要索引的字符数,而 `"required": True` 指定该字段是必需的文档字段。

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

要删除索引,请将索引名称传递给 `drop_`方法。例如,你可以这样删除 `popul` 索引:

mysql-py> db.countryinfo.drop_index("popul")