索引用于快速查找具有特定字段值的文档。如果没有索引,MySQL 必须从第一个文档开始,然后读取整个集合以查找相关字段。集合越大,成本就越高。如果集合很大,并且对特定字段的查询很常见,那么请考虑对文档中的特定字段创建索引。
例如,以下查询在 Population 字段上建立索引后执行效果更好
mysql-py> db.countryinfo.find("demographics.Population < 100")
...[output removed]
8 documents in set (0.00 sec)
create_index()
方法创建一个索引,您可以使用 JSON 文档来定义该索引,该文档指定要使用的字段。本节是对索引的概览。有关更多信息,请参见 对集合进行索引。
要创建非唯一索引,请将索引名称和索引信息传递给 create_index()
方法。禁止重复索引名称。
以下示例指定了一个名为 popul
的索引,该索引针对 demographics
对象中的 Population
字段定义,索引为 Integer
数值。最后一个参数指示该字段是否应该要求 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})