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

AnalyticDB:JSON インデックス

最終更新日:Apr 02, 2025

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

概要

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

使用上の注意

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

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

  • 既存のテーブルに JSON インデックスまたは JSON 配列インデックスを作成する場合:

    • パーティション分割された XUANWU_V2 テーブルとパーティション分割されていない XUANWU_V2 テーブルの場合、作成された JSON インデックスまたは JSON 配列インデックスは BUILD ジョブを必要とせずにすぐに有効になります。

    • パーティション化されていない XUANWU テーブルの場合、作成された JSON インデックスまたは JSON 配列インデックスは、[BUILD] ジョブが完了した後でのみ有効になります。

    • パーティション化された XUANWU テーブルの場合、作成された JSON インデックスまたは JSON 配列インデックスは、テーブル全体に対して実行される BUILD ジョブが完了した後でのみ有効になります。

JSON インデックスの作成

JSON インデックスを作成する際には、以下の点に注意してください。

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

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

説明

AnalyticDB for MySQL クラスターのマイナーバージョンを表示および更新するには、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)

パラメーター

パラメーター

説明

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 パラメーターをサポートしています。

    • 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',...)

パラメーター

パラメーター

説明

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 パラメーターをサポートしています。

    • 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 クラスターの マイナーバージョンを表示および更新するには、AnalyticDB for MySQL コンソールにログインし、クラスター情報 ページの 構成情報 セクションに移動します。

使用上の注意

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

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

構文

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

パラメーター

パラメーター

説明

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 配列インデックスを作成する

構文

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

パラメーター

パラメーター

説明

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_idx という名前のインデックスを削除します。

    ALTER TABLE adb_demo.customer DROP KEY age_idx;
  • json_test テーブルから index_vj という名前の JSON 配列インデックスを削除します。

    ALTER TABLE adb_demo.customer DROP KEY index_vj;

関連情報

  • JSON: JSON データ型について説明します。

  • JSON 関数: AnalyticDB for MySQL でサポートされている JSON 関数について説明します。