要使大型文档集合更有效地导航,可以基于集合中文档中的一个或多个字段创建索引。本节描述如何对集合建立索引。
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()
转换时GEOJSON
MySQL原生数据几何学
价值观。
文档字段支持以下数据类型。在使用时,类型名称不区分大小写类型
场地。
对于MySQL 8.0.17及以后版本,X DevAPI支持通过设置布尔值创建基于数组字段的索引数组
田野索引菲尔德
描述真正的
。例如,要创建索引电子邮件
数组:
收集。方法createIndex(“emails_idx”/ /{领域:[{“字段”:“$。email ", "type":"CHAR(128)", "array": true}]});
以下限制适用于基于数组创建索引: