Documentation Home

20.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定义 ,索引为 数值。最后一个参数指示该字段是否需要约束。如果值为 ,则该字段可以包含 值。索引信息是一个 JSON 文档,其中包含要包含在索引中的一个或多个字段的详细信息。每个字段定义必须包含字段的完整文档路径,并指定字段的类型。 PopulationdemographicsIntegerNOT NULLfalseNULL

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

此处,索引是使用整数数值创建的。可以使用更多选项,包括用于 GeoJSON 数据的选项。您还可以指定索引的类型,此处已省略,因为默认类型 index是合适的。

添加唯一索引

要创建唯一索引,请将索引名称、索引定义和索引类型unique传递给该 createIndex()方法。此示例显示了在国家名称 ( ) 上创建的唯一索引,这是要索引的集合"Name"中的另一个公共字段。countryinfo在索引字段描述中,"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")
相关信息