全部产品
Search
文档中心

PolarDB:Buat indeks parsial

更新时间:Jul 03, 2025

Anda dapat membuat indeks parsial saat membuat tabel terpartisi atau membuat indeks parsial pada tabel terpartisi yang sudah ada.

Buat indeks parsial saat Anda membuat tabel terpartisi

Sintaksis

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 informasi lebih lanjut tentang parameter lain dalam sintaksis, lihat CREATE TABLE.

Parameter

Parameter

Deskripsi

table_name

Nama tabel.

col_name

Nama kolom.

partition_name0

Nama partisi.

Catatan

Anda dapat menentukan beberapa partisi. Pisahkan beberapa nama partisi dengan koma (,).

subpartition_name0

Nama subpartisi.

Catatan

Anda dapat menentukan beberapa subpartisi. Pisahkan beberapa nama subpartisi dengan koma (,).

Contoh

  • Buat indeks parsial pada partisi.

    Kode contoh berikut menunjukkan cara membuat tabel terpartisi bernama orders dan kemudian membuat indeks parsial bernama o_ind_dp(dept_no, part_no) pada partisi orders_202212 untuk bulan Desember serta indeks parsial bernama o_ind_amout(amount, order_id) pada partisi historis lainnya:

    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 parsial pada subpartisi.

    Kode contoh berikut menunjukkan cara membuat tabel subpartisi LIST-RANGE bernama tenants dan membuat indeks parsial bernama ind_id pada semua subpartisi dari partisi p0 serta pada subpartisi p1_1, p1_2, dan p1_3 dari partisi p1. Selanjutnya, buat indeks parsial bernama ind_date pada subpartisi p0_1 dan p0_2 dari partisi p0 serta pada subpartisi p1_1 dan p1_2 dari partisi 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)
      )
    );

Buat indeks parsial pada tabel terpartisi yang sudah ada

Sintaksis

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 informasi lebih lanjut tentang parameter lain dalam sintaksis, lihat CREATE INDEX.

Parameter

Parameter

Deskripsi

index_name

Nama indeks.

table_name

Nama tabel.

partition_name0

Nama partisi.

Catatan

Anda dapat menentukan beberapa partisi. Pisahkan beberapa nama partisi dengan koma (,).

subpartition_name0

Nama subpartisi.

Catatan

Anda dapat menentukan beberapa subpartisi. Pisahkan beberapa nama subpartisi dengan koma (,).

Contoh

  • Buat indeks parsial pada partisi.

    Kode contoh berikut menunjukkan cara membuat indeks parsial bernama o_part_id pada partisi orders_202201 dari tabel terpartisi orders:

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

    Anda juga dapat menjalankan pernyataan ALTER TABLE ADD KEY untuk membuat indeks parsial dalam contoh sebelumnya.

    ALTER TABLE orders ADD KEY o_part_id(part_no, order_id) (partition orders_202201);
  • Buat indeks parsial pada subpartisi.

    Kode contoh berikut menunjukkan cara membuat indeks parsial bernama ind_count pada semua subpartisi dari partisi p0 serta pada subpartisi p1_1 dari partisi p1 dalam tabel terpartisi tenants:

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

    Anda juga dapat menjalankan pernyataan ALTER TABLE ADD KEY untuk membuat indeks parsial dalam contoh sebelumnya.

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