すべてのプロダクト
Search
ドキュメントセンター

AnalyticDB for MySQL:JSONインデックス

最終更新日:Jul 02, 2024

AnalyticDB for MySQLは、半構造化データクエリ機能としてJSONインデックスを提供し、半構造化データ処理を簡素化し、データクエリの効率を向上させます。 このトピックでは、JSONインデックスとJSON配列インデックスを作成する方法について説明します。

概要

AnalyticDB for MySQLは、JSONインデックスとJSON配列インデックスをサポートしています。 JSON型の列のJSONインデックスまたはJSON配列インデックスを作成できます。 これにより、データをクエリするときに、テーブル全体をスキャンしたり、JSONドキュメント全体を解析したりする必要がなくなります。 これにより、データクエリの効率が向上します。 JSONインデックスは、ログ情報、設定ファイル、デバイス情報などの複雑な半構造化データが保存され、照会されるシナリオに適しています。

使用上の注意

  • JSONインデックスとJSON配列インデックスは、JSON型の列に対してのみ作成できます。

  • 各JSONインデックスまたはJSON配列インデックスには、JSON列が1つだけ含まれます。 JSONインデックスまたはJSON配列インデックスに複数の列を含めるには、複数のJSONインデックスまたはJSON配列インデックスを作成します。

JSONインデックスの作成

JSONインデックスを作成するときは、次の項目に注意してください。

  • V3.1.5.10以降のAnalyticDB For MySQLクラスターの場合、テーブルの作成後にJSONインデックスは自動的に作成されません。 JSONインデックスを手動で作成する必要があります。

  • V3.1.5.10より前のAnalyticDB For MySQLクラスターの場合、テーブルの作成後にJSON列のJSONインデックスが自動的に作成されます。

説明

AnalyticDB For MySQLクラスターのマイナーバージョンを表示する方法については、クラスターのマイナーバージョンを表示するにはどうすればよいですか。 クラスターのマイナーバージョンを更新するには、テクニカルサポートにお問い合わせください。

テーブルを作成するときにJSONインデックスを作成する

使用上の注意

テーブルの作成時に1つ以上の列を指定してインデックスを作成した場合、AnalyticDB for MySQLはテーブル内の他の列のインデックスを自動的に作成しません。

構文

CREATE TABLE table_name(
  column_name column_type,
  {INDEX|KEY} [index_name](column_name|column_name->'$.json_path')
)
DISTRIBUTED BY HASH(column_name)

Parameters

パラメーター

説明

index_name

JSONインデックスの名前。

重要

インデックス名は一意である必要があります。

column_name | column_name->'$.json_path'

  • column_name: JSONインデックスを作成する列の名前。

  • column_name->'$.json_path': JSON列とそのプロパティキー。 各JSONインデックスには、JSON列のプロパティキーが1つだけ含まれます。

    重要
    • V3.1.6.8以降のAnalyticDB for MySQLクラスターのみが、column_name->'$.json_pathパラメーターをサポートしています。

      AnalyticDB For MySQLクラスターのマイナーバージョンを表示する方法については、クラスターのマイナーバージョンを表示するにはどうすればよいですか。 クラスターのマイナーバージョンを更新するには、テクニカルサポートにお問い合わせください。

    • JSON列にすでにインデックスがある場合は、JSON列のプロパティキーのインデックスを作成する前に、JSON列のインデックスを削除する必要があります。

テーブル作成ステートメントのその他のパラメーターについては、「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テーブルのvj JSON列の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 {INDEX | KEY} [index_name] (column_name | column_name->'$.json_path',...)

Parameters

パラメーター

説明

db_name

データベースの名前。

table_name

テーブルの名前。

index_name

JSONインデックスの名前。

重要

インデックス名は一意である必要があります。

column_name | column_name->'$.json_path'

  • column_name: JSONインデックスを作成する列の名前。

  • column_name->'$.json_path': JSON列とそのプロパティキー。 各JSONインデックスには、JSON列のプロパティキーが1つだけ含まれます。

    重要
    • V3.1.6.8以降のAnalyticDB for MySQLクラスターのみが、column_name->'$.json_pathパラメーターをサポートしています。

      AnalyticDB For MySQLクラスターのマイナーバージョンを表示する方法については、クラスターのマイナーバージョンを表示するにはどうすればよいですか。 クラスターのマイナーバージョンを更新するには、テクニカルサポートにお問い合わせください。

    • JSON列にすでにインデックスがある場合は、JSON列のプロパティキーのインデックスを作成する前に、JSON列のインデックスを削除する必要があります。

  • JSON_testテーブルのJSON型のvj列のjsonインデックスを作成します。

    ALTER TABLE json_test ADD KEY index_vj(vj);
  • JSON_testテーブルのvj JSON列のnameプロパティキーのjsonインデックスを作成します。

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

JSON配列インデックスの作成

V 3.1.10.6以降のAnalyticDB for MySQLクラスターのみがJSON配列インデックスをサポートしています。 JSON配列インデックスを作成したら、JSON_CONTAINS関数とJSON_OVERLAPS関数を使用してデータをクエリし、クエリ効率を向上させることができます。

使用上の注意

AnalyticDB for MySQLは、JSON配列内の数値要素と文字列要素のみのインデックスを作成できますが、配列内の他のタイプの要素 (ネストされた配列やオブジェクトなど) は作成できません。

テーブルを作成するときにJSON配列インデックスを作成する

構文

CREATE TABLE table_name(
  column_name column_type,
  {INDEX|KEY} [index_name](column_name->'$[*]')
)
DISTRIBUTED BY HASH(column_name);

Parameters

パラメーター

説明

index_name

JSON配列インデックスの名前。

重要

インデックス名は一意である必要があります。

column_name->'$[*]'

column_nameは、JSON配列インデックスを作成する列の名前を指定します。 たとえば、vj->'$[*]' は、vj列のJSON配列インデックスを作成することを指定します。

JSON_testテーブルのJSON型のvj列のjson配列インデックスを作成します。

CREATE TABLE json_test(
  id int,
  vj json,
  index idx_vj_array(vj->'$[*]')
)
DISTRIBUTED BY HASH(id);

既存のテーブルのJSON配列インデックスを作成する

使用上の注意

作成されたJSON配列インデックスは、BUILDジョブの完了後にのみ有効になります。 自動ビルドジョブ、手動ビルドジョブ、およびビルドジョブのステータスについては、「ビルド」をご参照ください。

構文

ALTER TABLE db_name.table_name ADD {INDEX | KEY} [index_name] (column_name->'$[*]')

Parameters

項目

説明

db_name

データベースの名前。

table_name

テーブルの名前。

index_name

JSON配列インデックスの名前。

重要

インデックス名は一意である必要があります。

column_name->'$[*]'

column_nameは、JSON配列インデックスを作成する列の名前を指定します。 たとえば、vj->'$[*]' は、vj列のJSON配列インデックスを作成することを指定します。

JSON_testテーブルのJSON型のvj列のjson配列インデックスを作成します。

ALTER TABLE json_test ADD KEY index_vj(vj->'$[*]');

インデックスの削除

構文

ALTER TABLE db_name.table_name DROP KEY index_name

パラメーターの説明

index_name: 削除するインデックスの名前。 SHOW INDEX FROM db_name.table_name; ステートメントを実行して、index_nameの値を照会できます。

customerテーブルのage列のインデックスを削除します。

ALTER TABLE adb_demo.customer DROP KEY age_idx;

関連ドキュメント

JSONデータのクエリ方法については、「JSON関数」をご参照ください。