Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

22.4.3.6 创建和删除索引

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

例如,以下查询在 Population 字段上创建索引后性能更好:

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

The create_index() 方法创建一个索引,可以使用 JSON 文档定义要使用的字段。该部分是索引的高级概述。有关更多信息,请参阅 索引集合

添加非唯一索引

要创建非唯一索引,请将索引名称和索引信息传递给 create_index() 方法。禁止重复的索引名称。

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

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

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

添加唯一索引

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

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

要删除索引,请将要删除的索引名称传递给 drop_index() 方法。例如,您可以删除 popul 索引,如下所示:

mysql-py> db.countryinfo.drop_index("popul")
相关信息