All Products
Search
Document Center

PolarDB:Membuat Indeks Parsial

Last Updated:Mar 28, 2026

Indeks parsial hanya mencakup partisi yang Anda tentukan, bukan seluruh tabel partisi. Pendekatan ini menjaga ukuran indeks tetap ringkas—berguna ketika kueri menargetkan partisi tertentu (misalnya, bulan-bulan terbaru atau kelompok penyewa tertentu), sedangkan data lainnya jarang atau tidak pernah diakses.

Kapan Menggunakan Indeks Parsial

Gunakan indeks parsial ketika beban kerja kueri Anda terkonsentrasi pada subset partisi:

  • Pemisahan data hot/cold: Partisi terbaru menerima trafik kueri tinggi; partisi lama jarang dikueri. Buat indeks hanya untuk partisi terbaru guna mengurangi ukuran indeks dan overhead penulisan pada data dingin.

  • Kueri spesifik penyewa: Pada tabel multi-penyewa, kueri dibatasi pada kelompok penyewa tertentu. Buat indeks hanya untuk partisi yang relevan agar tidak perlu memelihara indeks penuh untuk seluruh tabel.

  • Kueri rentang selektif: Laporan yang selalu memfilter berdasarkan rentang partisi tertentu. Indeks parsial pada partisi tersebut lebih kecil dan lebih cepat dipindai dibandingkan indeks global.

Jika kueri secara rutin mencakup semua partisi atau tabel cukup kecil sehingga indeks penuh masih dapat dikelola, maka indeks global mungkin lebih tepat.

Membuat Indeks Parsial Saat Membuat Tabel Partisi

Tambahkan klausa partial_partition_option dalam pernyataan CREATE TABLE untuk mendefinisikan indeks parsial saat pembuatan tabel.

Sintaks

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] table_name
    [(create_definition,...)]
    [table_options]
    partition_options
     ...

create_definition adalah:

{
    col_name column_definition
  | {INDEX | KEY} [index_name] [index_type] (key_part,...)
      [index_option] [partial_partition_option]
      ...
}

partial_partition_option adalah:

([PARTITION partition_name0[(SUBPARTITION subpartition_name0[, ...])]][,...]
 )

Untuk semua parameter lainnya, lihat CREATE TABLE.

Parameter

ParameterDeskripsi
table_nameNama tabel.
col_nameNama kolom.
partition_name0Nama partisi. Pisahkan beberapa nama partisi dengan koma (,).
subpartition_name0Nama subpartisi. Pisahkan beberapa nama subpartisi dengan koma (,).

Contoh

Buat indeks hanya untuk partisi bulan ini

Contoh berikut membuat tabel orders yang dipartisi berdasarkan bulan (RANGE(month(date))) dan mendefinisikan dua indeks parsial:

  • o_ind_dp(dept_no, part_no) — hanya mencakup partisi Desember (orders_202212), yang menerima penulisan dan kueri bertarget untuk bulan berjalan.

  • o_ind_amout(amount, order_id) — mencakup 11 partisi historis (orders_202201 hingga orders_202211), mendukung pelaporan berbasis jumlah pada data historis.

CREATE TABLE orders
(
  order_id    INT,
  dept_no     INT,
  part_no     INT,
  country     varchar(20),
  date        DATE,
  amount      INT,
  Primary Key(order_id),
  KEY o_ind_dp(dept_no, part_no) (partition orders_202212),
  KEY o_ind_amout(amount, order_id)
   (partition orders_202201,
    partition orders_202202,
    partition orders_202203,
    partition orders_202204,
    partition orders_202205,
    partition orders_202206,
    partition orders_202207,
    partition orders_202208,
    partition orders_202209,
    partition orders_202210,
    partition orders_202211
   )
)
PARTITION BY RANGE(month(date))
(
  PARTITION orders_202201 VALUES LESS THAN(2),
  PARTITION orders_202202 VALUES LESS THAN(3),
  PARTITION orders_202203 VALUES LESS THAN(4),
  PARTITION orders_202204 VALUES LESS THAN(5),
  PARTITION orders_202205 VALUES LESS THAN(6),
  PARTITION orders_202206 VALUES LESS THAN(7),
  PARTITION orders_202207 VALUES LESS THAN(8),
  PARTITION orders_202208 VALUES LESS THAN(9),
  PARTITION orders_202209 VALUES LESS THAN(10),
  PARTITION orders_202210 VALUES LESS THAN(11),
  PARTITION orders_202211 VALUES LESS THAN(12),
  PARTITION orders_202212 VALUES LESS THAN(13)
);

Buat indeks pada subpartisi tertentu dalam tabel multi-penyewa

Contoh berikut membuat tabel tenants yang disubpartisi menggunakan LIST-RANGE dan mendefinisikan dua indeks parsial:

  • ind_id(id) — mencakup semua subpartisi dari p0 dan subpartisi p1_1, p1_2, serta p1_3 dari p1.

  • ind_date(date) — mencakup subpartisi p0_1 dan p0_2 dari p0, serta subpartisi p1_1 dan p1_2 dari p1.

CREATE TABLE tenants (
  id INT,
  date DATE,
  count INT,
  KEY ind_id (id)  (
    partition p0,
    partition p1 (subpartition p1_1, subpartition p1_2, subpartition p1_3)
  ),
  KEY ind_date (date) (
    partition p0 (subpartition p0_1,  subpartition p0_2),
    partition p1 (subpartition p1_1, subpartition p1_2)
  )
) PARTITION BY LIST COLUMNS(id)
  SUBPARTITION BY RANGE (month(date))(
  PARTITION p0 VALUES IN (1, 2, 3, 4, 5) (
    SUBPARTITION p0_1 VALUES LESS THAN(4),
    SUBPARTITION p0_2 VALUES LESS THAN(7),
    SUBPARTITION p0_3 VALUES LESS THAN(10),
    SUBPARTITION p0_4 VALUES LESS THAN(13)
  ),
  PARTITION p1 VALUES IN (11, 12, 13, 14, 15) (
    SUBPARTITION p1_1 VALUES LESS THAN(4),
    SUBPARTITION p1_2 VALUES LESS THAN(7),
    SUBPARTITION p1_3 VALUES LESS THAN(10),
    SUBPARTITION p1_4 VALUES LESS THAN(13)
  )
);

Membuat Indeks Parsial pada Tabel Partisi yang Sudah Ada

Gunakan CREATE INDEX atau ALTER TABLE ADD KEY untuk menambahkan indeks parsial ke tabel yang sudah ada.

Sintaks

CREATE [UNIQUE] INDEX index_name
    [index_type]
    ON table_name (key_part,...)
    [index_option]
    [algorithm_option | lock_option | partial_partition_option] ...

partial_partition_option adalah:

([PARTITION partition_name0[(SUBPARTITION subpartition_name0[, ...])]][,...]
  )

Untuk semua parameter lainnya, lihat CREATE INDEX.

Parameter

ParameterDeskripsi
index_nameNama indeks.
table_nameNama tabel.
partition_name0Nama partisi. Pisahkan beberapa nama partisi dengan koma (,).
subpartition_name0Nama subpartisi. Pisahkan beberapa nama subpartisi dengan koma (,).

Contoh

Tambahkan indeks parsial ke satu partisi

Contoh berikut menambahkan indeks parsial o_part_id ke partisi orders_202201 pada tabel orders yang sudah ada:

CREATE INDEX o_part_id ON orders(part_no, order_id) (partition orders_202201);

Atau, gunakan ALTER TABLE ADD KEY:

ALTER TABLE orders ADD KEY o_part_id(part_no, order_id) (partition orders_202201);

Tambahkan indeks parsial yang mencakup beberapa partisi dan subpartisi

Contoh berikut menambahkan indeks parsial ind_count ke semua subpartisi dari p0 dan ke subpartisi p1_1 dari p1 pada tabel tenants yang sudah ada:

CREATE INDEX ind_count ON tenants(count) (partition p0, partition p1 (subpartition p1_1));

Atau, gunakan ALTER TABLE ADD KEY:

ALTER TABLE tenants ADD KEY ind_count(count) (partition p0, partition p1 (subpartition p1_1));