文档

JSON索引

更新时间:

为降低处理半结构化数据的难度,提升查询效率,AnalyticDB for MySQL提供了半结构化数据检索功能,即JSON索引。本文主要介绍如何创建JSON索引。

JSON索引介绍

AnalyticDB for MySQL支持创建JSON索引。通过为存储在JSON列中的数据创建JSON索引,可以避免在查询数据时扫描全表数据或对整个JSON文档进行解析,从而提升数据查询效率。JSON索引主要适用于存储和查询复杂半结构化数据的场景,例如日志信息、配置文件、设备信息等。

注意事项

  • JSON索引的列数据类型必须为JSON。

  • 一个JSON索引仅能包含一个JSON列。如需对多个列创建JSON索引,可创建多个JSON索引。

创建JSON索引

创建JSON索引时,您还需注意以下内容:

  • 3.1.5.10及以上内核版本的集群,创建表后不会自动创建JSON索引,您需手动创建JSON索引。

  • 3.1.5.10以下内核版本的集群,创建表后会自动为JSON列创建JSON索引。

说明 如何查看集群内核版本,请参见如何查看实例版本信息。如需升级内核版本,请联系技术支持。

创建表时创建JSON索引

注意事项

若您在建表时手动指定为某一列或某几列创建INDEX索引,AnalyticDB for MySQL不会再为表中其他列自动创建INDEX索引。

语法

CREATE TABLE table_name(
  column_name column_type,
  index index_name(column_name|column_name->'$.json_path')
)
DISTRIBUTED BY HASH(column_name);

参数说明

参数

说明

index_name

JSON索引名称。

重要

索引名称唯一,不能相同。

column_name|column_name->'$.json_path'

  • column_name:JSON索引的列。

  • column_name->'$.json_path':JSON索引的列及其指定的属性键。每一个JSON索引只能有一个JSON列的一个属性键。

    重要
    • 仅3.1.6.8及以上内核版本的集群支持column_name->'$.json_path

      如何查看集群内核版本,请参见如何查看实例版本信息。如需升级内核版本,请联系技术支持。

    • 为JSON列中的指定属性键创建索引时,若该JSON列已存在INDEX索引,需先删除该列的INDEX索引,否则会报错。

建表语句的其他参数,请参见CREATE TABLE

示例

  • json_test表中的JSON列vj创建JSON索引。

    CREATE TABLE json_test(
      id int,
      vj json,
      index idx_vj(vj)
    )
    DISTRIBUTED BY HASH(id);
  • json_test表中JSON列vj的属性键name创建JSON索引。

    CREATE TABLE json_test(
      id int,
      vj json COMMENT 
      index idx_vj_path(vj->'$.name')
    )
    DISTRIBUTED BY HASH(id);

为已存在的表创建JSON索引

语法

ALTER TABLE db_name.table_name ADD KEY index_name(column_name|column_name->'$.json_path');

参数说明

参数

说明

db_name

数据库名称。

table_name

表名称。

index_name

JSON索引名称。

重要

索引名称唯一,不能相同。

column_name|column_name->'$.json_path'

  • column_name:JSON索引的列。

  • column_name->'$.json_path':JSON索引的列及其指定的属性键。每一个JSON索引只能有一个JSON列的一个属性键。

    重要
    • 仅3.1.6.8及以上内核版本的集群支持column_name->'$.json_path

      如何查看集群内核版本,请参见如何查看实例版本信息。如需升级内核版本,请联系技术支持。

    • 为JSON列中的指定属性键创建索引时,若该JSON列已存在INDEX索引,需先删除该列的INDEX索引,否则会报错。

示例

  • json_test表中的JSON列vj创建JSON索引。

    ALTER TABLE json_test ADD KEY index_vj(vj);
  • json_test表中JSON列vj的属性键name创建JSON索引。

    ALTER TABLE json_test ADD KEY index_vj_key(vj->'$.name');

相关文档

如何检索JSON数据,请参见JSON函数

  • 本页导读 (1)