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' |
|
テーブル作成ステートメントのその他のパラメーターについては、「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' |
|
例
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->'$[*]' |
|
例
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->'$[*]' |
|
例
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関数」をご参照ください。