4.4索引集合

要使大型文档集合更有效地导航,可以基于集合中文档中的一个或多个字段创建索引。本节描述如何对集合建立索引。

创建索引

Collection索引是普通MySQL索引上的虚拟列中,从集合中提取数据中的数据。由于MySQL无法直接索引JSON值,因此能够启用集合的索引,因此提供了一个JSON文档,该文档指定索引要使用的文档的字段。您将JSON文档传递定义索引作为IndexDefinition.参数到Collection.createIndex (名称IndexDefinition.方法。这个泛型示例(实际语法可能因不同编程语言而异)展示了如何基于字段创建强制整数类型索引数数

myCollection。方法createIndex(“计数”,{字段:[{“字段”:“$。数”、“类型”:“INT”,要求:真实}});

此示例显示如何基于文本字段创建索引:在这种情况下,邮政编码。对于文本字段,您必须根据MySQL Server的要求指定索引的前缀长度:

myCollection。方法createIndex(“zip”,{字段:[{字段:“$ . zip”,类型:“文本”(10)}]})

定义一个索引格式的信息IndexDefinition.并在支持的字段类型中进行索引。

Collection.createIndex ()如果已存在具有相同名称的索引或未正确地形成索引定义,则使用错误的方法失败。名称参数是必需的,必须是SQL语句所接受的有效索引名称创建索引

要删除现有索引,请使用收集。dropIndex(字符串名称)方法。这将删除通过传递的名称删除索引,如果命名索引不存在,则操作默默地成功。

集合的索引存储为虚拟列。要验证创建的索引使用显示指数陈述。例如要从MySQL Shell中使用此SQL:

session.runsql('show index从myschema.mycollection');

定义一个索引

要基于集合中的文档创建索引,您需要创建IndexDefinition.json文件。本节介绍您可以在此类JSON文档中使用的有效字段以定义索引。

要定义用于索引集合的文档字段,该字段的类型必须在整个集合中保持一致。换句话说,类型必须一致。用于定义索引的JSON文档,例如{字段:[{字段:“$。用户名,类型:‘文本’}]},可以包含以下内容:

  • 领域:至少一个数组索引菲尔德对象,每个对象描述要包含在索引中的JSON文档字段。

    一个单一的索引菲尔德描述包括以下字段:

    • :一个字符串,包含要建立索引的文档成员或字段的完整文档路径

    • 类型:用于将字段映射到的受支持的列类型之一的字符串(参见字段数据类型)。对于数字类型,可选无符号关键字可以遵循。为了文本类型您必须定义要考虑索引的长度(前缀长度)。

    • 必需的:应该设置为可选的布尔值真正的如果在文档中需要该字段。默认为错误的除了除了所有类型之外GEOJSON,默认为此真正的

    • 选项:一个可选的整数,在解码时用作一个特殊的选项标志GEOJSON数据(参见描述st_geomfromgeojson()详情)。

    • srid:解码时,可选的整数作为SRID值GEOJSON数据(参见描述st_geomfromgeojson()详情)。

    • 数组:(对于MySQL 8.0.17及以后版本)一个可选的布尔值,被设置为真正的如果字段包含数组。默认值为错误的。看索引数组字段有关详细信息。

      重要的

      对于MySQL 8.0.16和更早的版本,JSON数组字段不支持在索引中;指定包含数组数据的字段不会从服务器生成错误,但是索引不能正常工作。

  • 类型:一个可选的字符串,定义了索引的类型。价值是其中之一指数空间。默认为指数可以省略。

包括任何其他领域IndexDefinition.索引菲尔德json文档上面未描述的原因collection.createIndex ()失败错误。

如果未指定索引类型或设置为指数然后以与发出创建的方式创建生成的索引创建索引。如果索引类型设置为空间然后,创建的索引与发出创建的索引相同创建索引空间关键字,参见空间索引的优化创建空间索引。例如:

mycollection.createIndex('myIndex',// {字段:[{field:'$ .mygeojsonfield',键入:'geojson',必需:true}],类型:'spatial'})
重要的

使用时空间索引类型必需的字段不能设置为错误的索引菲尔德参赛作品。

这是一个基于多个字段创建索引的示例:

mycollection.createIndex('myIndex',{字段:[{field:'$ .myfield',type:'text'},// {field:'$ .myfield2',类型:'text(10)'},{字段:'$ .myfield3',键入:'int'}]})

索引字段的值从JSON转换为索引菲尔德描述使用标准的MySQL类型转换(参见表达式求值中的类型转换),除了GEOJSON类型,使用该类型st_geomfromgeojson()转换功能。这意味着使用数字类型索引菲尔德描述,将非数字的实际字段值转换为0。

选项srid领域索引菲尔德只能出现如果类型被设置为GEOJSON。如果存在,则将它们用作参数st_geomfromgeojson()转换时GEOJSONMySQL原生数据几何学价值观。

字段数据类型

文档字段支持以下数据类型。在使用时,类型名称不区分大小写类型场地。

索引数组字段

对于MySQL 8.0.17及以后版本,X DevAPI支持通过设置布尔值创建基于数组字段的索引数组田野索引菲尔德描述真正的。例如,要创建索引电子邮件数组:

收集。方法createIndex(“emails_idx”/ /{领域:[{“字段”:“$。email ", "type":"CHAR(128)", "array": true}]});

以下限制适用于基于数组创建索引: