全部产品
Search
文档中心

AnalyticDB:Indeks JSON

更新时间:Jul 02, 2025

AnalyticDB for MySQL menyediakan indeks JSON sebagai fitur untuk menyederhanakan pemrosesan dan meningkatkan efisiensi kueri data semi-terstruktur. Topik ini menjelaskan cara membuat indeks JSON dan indeks array JSON.

Ikhtisar

AnalyticDB for MySQL mendukung indeks JSON dan indeks array JSON. Anda dapat membuat indeks ini untuk kolom bertipe JSON, sehingga tidak perlu memindai seluruh tabel atau mengurai dokumen JSON saat melakukan kueri. Indeks JSON cocok untuk skenario penyimpanan dan pengkuerian data semi-terstruktur seperti log, file konfigurasi, dan informasi perangkat.

Catatan penggunaan

  • Anda hanya dapat membuat indeks JSON dan indeks array JSON untuk kolom bertipe JSON.

  • Setiap indeks JSON atau indeks array JSON hanya melibatkan satu kolom JSON. Untuk melibatkan beberapa kolom, buat beberapa indeks terpisah.

  • Saat membuat indeks JSON atau indeks array JSON untuk tabel yang sudah ada:

    • Untuk tabel XUANWU_V2 yang dipartisi dan tidak dipartisi, indeks langsung berlaku tanpa memerlukan pekerjaan BUILD.

    • Untuk tabel XUANWU yang tidak dipartisi, indeks baru berlaku setelah pekerjaan BUILD selesai.

    • Untuk tabel XUANWU yang dipartisi, indeks baru berlaku setelah pekerjaan BUILD pada seluruh tabel selesai.

Buat indeks JSON

Perhatikan hal-hal berikut saat membuat indeks JSON:

  • Untuk kluster AnalyticDB for MySQL versi V3.1.5.10 atau lebih baru, indeks JSON tidak dibuat secara otomatis setelah pembuatan tabel. Anda harus membuatnya secara manual.

  • Untuk kluster AnalyticDB for MySQL sebelum versi V3.1.5.10, indeks JSON dibuat secara otomatis untuk kolom JSON setelah pembuatan tabel.

Catatan

Untuk melihat dan memperbarui versi minor dari kluster AnalyticDB for MySQL, masuk ke konsol AnalyticDB for MySQL dan buka bagian Configuration Information pada halaman Cluster Information.

Buat indeks JSON saat membuat tabel

Catatan penggunaan

Jika Anda menentukan satu atau lebih kolom untuk indeks saat membuat tabel, AnalyticDB for MySQL tidak akan membuat indeks untuk kolom lain dalam tabel.

Sintaks

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

Parameter

Parameter

Deskripsi

index_name

Nama indeks JSON.

Penting

Nama indeks harus unik.

column_name|column_name->'$.json_path'

  • column_name: nama kolom untuk mana Anda ingin membuat indeks JSON.

  • column_name->'$.json_path': kolom JSON dan kunci propertinya. Setiap indeks JSON hanya melibatkan satu kunci properti dari kolom JSON.

    Penting
    • Hanya kluster AnalyticDB for MySQL versi V3.1.6.8 atau lebih baru yang mendukung parameter column_name->'$.json_path.

    • Jika kolom JSON sudah memiliki indeks, Anda harus menghapus indeks untuk kolom JSON tersebut sebelum dapat membuat indeks untuk kunci properti dari kolom JSON.

Untuk informasi tentang parameter lain dari pernyataan pembuatan tabel, lihat CREATE TABLE.

Contoh

  • Buat indeks JSON untuk kolom vj bertipe JSON dalam tabel json_test.

    CREATE TABLE json_test(
      id int,
      vj json,
      index idx_vj(vj)
    )
    DISTRIBUTED BY HASH(id);
  • Buat indeks JSON untuk kunci properti name dari kolom JSON vj dalam tabel json_test.

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

Buat indeks JSON untuk tabel yang sudah ada

Sintaks

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

Parameter

Parameter

Deskripsi

db_name

Nama basis data.

table_name

Nama tabel.

index_name

Nama indeks JSON.

Penting

Nama indeks harus unik.

column_name|column_name->'$.json_path'

  • column_name: nama kolom untuk mana Anda ingin membuat indeks JSON.

  • column_name->'$.json_path': kolom JSON dan kunci propertinya. Setiap indeks JSON hanya melibatkan satu kunci properti dari kolom JSON.

    Penting
    • Hanya kluster AnalyticDB for MySQL versi V3.1.6.8 atau lebih baru yang mendukung parameter column_name->'$.json_path.

    • Jika kolom JSON sudah memiliki indeks, Anda harus menghapus indeks untuk kolom JSON tersebut sebelum dapat membuat indeks untuk kunci properti dari kolom JSON.

Contoh

  • Buat indeks JSON untuk kolom vj bertipe JSON dalam tabel json_test.

    ALTER TABLE json_test ADD KEY index_vj(vj);
  • Buat indeks JSON untuk kunci properti name dari kolom JSON vj dalam tabel json_test.

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

Buat indeks array JSON

Hanya kluster AnalyticDB for MySQL versi V 3.1.10.6 atau lebih baru yang mendukung indeks array JSON. Setelah membuat indeks array JSON, Anda dapat menggunakan fungsi JSON_CONTAINS dan JSON_OVERLAPS untuk meningkatkan efisiensi kueri.

Catatan

Untuk melihat dan memperbarui versi minor dari kluster AnalyticDB for MySQL, masuk ke konsol AnalyticDB for MySQL dan buka bagian Configuration Information pada halaman Cluster Information.

Catatan penggunaan

AnalyticDB for MySQL hanya dapat membuat indeks untuk elemen numerik dan string dalam array JSON, tetapi tidak untuk jenis elemen lainnya (seperti array bersarang atau objek).

Buat indeks array JSON saat membuat tabel

Sintaks

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

Parameter

Parameter

Deskripsi

index_name

Nama indeks array JSON.

Penting

Nama indeks harus unik.

column_name->'$[*]'

column_name menentukan nama kolom untuk mana Anda ingin membuat indeks array JSON. Sebagai contoh, vj->'$[*]' menentukan untuk membuat indeks array JSON untuk kolom vj.

Contoh

Buat indeks array JSON untuk kolom vj bertipe JSON dalam tabel json_test.

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

Buat indeks array JSON untuk tabel yang sudah ada

Sintaks

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

Parameter

Parameter

Deskripsi

db_name

Nama basis data.

table_name

Nama tabel.

index_name

Nama indeks array JSON.

Penting

Nama indeks harus unik.

column_name->'$[*]'

column_name menentukan nama kolom untuk mana Anda ingin membuat indeks array JSON. Sebagai contoh, vj->'$[*]' menentukan untuk membuat indeks array JSON untuk kolom vj.

Contoh

Buat indeks array JSON untuk kolom vj bertipe JSON dalam tabel json_test.

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

Hapus indeks

Sintaks

ALTER TABLE db_name.table_name DROP KEY index_name

Parameter

index_name: nama indeks yang ingin dihapus. Anda dapat menjalankan pernyataan SHOW INDEX FROM db_name.table_name; untuk mengkueri nilai parameter index_name.

Contoh

  • Hapus indeks bernama age_idx dalam tabel customer.

    ALTER TABLE adb_demo.customer DROP KEY age_idx;
  • Hapus indeks array JSON bernama index_vj dalam tabel json_test.

    ALTER TABLE adb_demo.customer DROP KEY index_vj;

Referensi

  • JSON: menjelaskan tipe data JSON.

  • Fungsi JSON: menjelaskan fungsi JSON yang didukung oleh AnalyticDB for MySQL.