全部产品
Search
文档中心

PolarDB:Indeks Sekunder Global (GSIs)

更新时间:Nov 11, 2025

PolarDB for MySQL mendukung pembuatan indeks sekunder global (GSI) pada tabel partisi. GSI membuat tabel partisi menjadi transparan sehingga dapat digunakan layaknya tabel non-partisi, yang secara signifikan mengurangi keterbatasan akibat kunci partisi.

Catatan
  • Untuk menggunakan fitur GSI, buka Quota Center. Temukan kuota berdasarkan Quota ID polardb_mysql_gsi, lalu klik Apply di kolom Tindakan untuk mengaktifkan fitur tersebut.

  • Untuk informasi lebih lanjut tentang GSI, bergabunglah dengan grup DingTalk untuk mendapatkan bantuan. ID grupnya adalah 24490017825.

Informasi latar belakang

Indeks tradisional pada tabel partisi merupakan indeks lokal. Indeks lokal dipartisi dengan cara yang sama seperti tabel induknya, dan data setiap partisi indeks dibangun dari partisi tabel yang bersesuaian. Oleh karena itu, indeks lokal hanya menjamin pengurutan data dalam setiap partisi. Untuk membuat indeks unik lokal, bidang indeks harus mencakup semua kunci partisi.

Ketika sebuah tabel partisi hanya memiliki indeks lokal, penggunaannya menjadi menantang karena keterbatasan kunci partisi:

  • Jika kondisi kueri tidak mencakup kunci partisi, kueri harus memindai semua partisi tabel, menyebabkan amplifikasi baca yang signifikan—yang semakin memburuk seiring bertambahnya jumlah partisi.

  • Jika hasil kueri memerlukan pengurutan berdasarkan bidang indeks, data tidak dijamin terurut secara global di seluruh partisi meskipun sudah terurut dalam masing-masing partisi. Hal ini dapat memicu operasi pengurutan global tambahan.

  • Indeks unik lokal harus mencakup semua kunci partisi; jika tidak, indeks tersebut tidak dapat menjamin kendala keunikan global di seluruh partisi.

Berbeda dengan indeks lokal, indeks global di PolarDB for MySQL tidak dipartisi dan dibangun dari data seluruh partisi. Dengan demikian, data dalam indeks global diurutkan secara global di seluruh tabel partisi. Untuk membuat indeks unik global, bidang indeks tidak perlu mencakup semua kunci partisi.

Prasyarat

Kluster Anda harus menjalankan PolarDB for MySQL versi 8.0.2, revisi 8.0.2.2.7 atau yang lebih baru. Untuk memeriksa versi kluster Anda, lihat Query the version number.

Batasan

  • Indeks sekunder global hanya didukung pada tabel partisi yang menggunakan engine InnoDB, bukan pada tabel partisi hibrida.

  • Indeks sekunder global tidak dapat berupa indeks teks penuh atau indeks spasial.

  • Indeks sekunder global tidak didukung pada tabel terkompresi, tabel sementara, tabel terenkripsi, atau tabel yang menggunakan format baris REDUNDANT atau COMPRESSED.

  • Tabel yang memiliki GSI tidak mendukung kolom yang dihasilkan (generated columns).

  • Operasi DDL tingkat partisi—kecuali penambahan partisi RANGE atau LIST baru—akan membuat GSI yang ada tidak valid. Anda kemudian harus menghapus dan membangun ulang semua GSI pada tabel tersebut, atau menggunakan sintaks UPDATE GLOBAL INDEX untuk membangun ulang indeks sekunder.

Peningkatan fitur

  • Anda dapat membuat GSI secara paralel menggunakan parallel DDL.

  • Anda dapat menggunakan fitur instant add column pada tabel partisi yang memiliki GSI.

  • Untuk tabel partisi RANGE atau LIST yang memiliki GSI, kunci metadata (MDL) tingkat partisi didukung saat Anda menambahkan partisi baru.

  • Anda dapat mengonversi tabel yang memiliki GSI menjadi tabel partisi INTERVAL RANGE. Anda juga dapat membuat GSI pada tabel partisi INTERVAL RANGE.

  • Saat melakukan operasi DDL tingkat partisi pada tabel partisi yang memiliki GSI, Anda dapat menggunakan sintaks UPDATE GLOBAL INDEX untuk membangun ulang GSI pada tabel tersebut. Contohnya:

    1. Buat tabel partisi rentang bernama t1 yang menggunakan bidang a sebagai kunci partisi, dan buat indeks global bernama k1 pada bidang b.

      CREATE TABLE t1(
        a INT PRIMARY KEY,
        b INT,
        INDEX k1(b) GLOBAL
      ) PARTITION BY RANGE (`a`)
      (PARTITION p0 VALUES LESS THAN (5) ENGINE = InnoDB,
       PARTITION p1 VALUES LESS THAN (10) ENGINE = InnoDB);
    2. Hapus partisi p1 dari tabel t1 dan bangun ulang GSI.

      ALTER TABLE t1 DROP PARTITION p1 UPDATE GLOBAL INDEX;

Sintaksis

Saat membuat indeks, Anda dapat menambahkan kata kunci LOCAL atau GLOBAL setelah nama indeks untuk menentukan apakah indeks tersebut bersifat lokal atau global.

Catatan

Jika Anda tidak menentukan kata kunci GLOBAL saat membuat indeks, indeks lokal akan dibuat secara default.

Contoh

  • Buat tabel partisi bernama t1 yang menggunakan bidang a sebagai kunci partisi, dan buat indeks global bernama k1 pada bidang b.

    CREATE TABLE t1(
      a INT PRIMARY KEY,
      b INT,
      INDEX k1(b) GLOBAL
    ) PARTITION BY HASH(a) PARTITIONS 3;
  • Anda dapat membuat tabel partisi bernama t1 yang menggunakan bidang a sebagai kunci partisi, lalu membuat indeks global bernama k1 dan indeks unik global bernama k2 pada bidang b dari tabel t1.

    CREATE TABLE t1(
      a INT PRIMARY KEY,
      b INT
    ) PARTITION BY HASH(a) PARTITIONS 3;
    
    ALTER TABLE t1 ADD INDEX k1(b) GLOBAL;
    
    CREATE UNIQUE INDEX k2 ON t1(b) GLOBAL;

Pengujian kinerja

Objek pengujian

Pengujian menggunakan dua tabel partisi dengan skema tabel yang sama, masing-masing berisi satu juta entri data. Indeks lokal dibuat pada salah satu tabel partisi, sedangkan GSI dibuat pada tabel lainnya.

Contoh ini menggunakan tabel partisi mytest1.big_table_1 dan mytest2.big_table_1. Tabel mytest1.big_table_1 memiliki indeks lokal, sedangkan tabel mytest2.big_table_1 memiliki GSI.

CREATE TABLE mytest1.big_table_1(
  a INT PRIMARY KEY,
  b INT,
  c INT,
  INDEX k1(b) LOCAL
) PARTITION BY HASH(a) PARTITIONS 32;

CREATE TABLE mytest2.big_table_1(
  a INT PRIMARY KEY,
  b INT,
  c INT,
  INDEX k1(b) GLOBAL
) PARTITION BY HASH(a) PARTITIONS 32;

Metode pengujian

Pengujian ini mengukur waktu eksekusi pernyataan SELECT, UPDATE, dan DELETE dengan kondisi kueri yang tidak mengandung kunci partisi. Pengujian dilakukan pada tabel dengan jumlah partisi berbeda untuk membandingkan kinerja indeks lokal dan GSI.

Hasil pengujian

  • Waktu eksekusi pernyataan SELECT dengan kondisi kueri yang tidak mencakup kunci partisi.image

  • Waktu eksekusi pernyataan UPDATE dengan kondisi kueri yang tidak mencakup kunci partisi.image

  • Waktu eksekusi pernyataan DELETE dengan kondisi kueri yang tidak mencakup kunci partisi.image

Hasil pengujian menunjukkan bahwa ketika kondisi kueri tidak mencakup kunci partisi, perintah SELECT, UPDATE, dan DELETE dieksekusi lebih cepat dengan GSI. Keunggulan kinerja ini semakin signifikan seiring bertambahnya volume data.