All Products
Search
Document Center

PolarDB:LIST DEFAULT HASH

Last Updated:Apr 24, 2026

Topik ini menjelaskan cara membuat dan memodifikasi tabel partisi LIST DEFAULT HASH.

Informasi latar belakang

PolarDB mendukung strategi partisi hibrida yang menggabungkan partisi LIST dan HASH pada tingkat yang sama. Dalam model ini, data terlebih dahulu dievaluasi terhadap sekumpulan partisi LIST. Data yang tidak sesuai dengan nilai LIST yang telah ditentukan akan ditempatkan di partisi default. Jika partisi default ini dibagi lagi, fungsi HASH akan mendistribusikan data tersebut ke dalam subpartisi. Pendekatan ini ideal untuk kasus penggunaan di mana nilai LIST tersebar tidak merata atau ketika mencantumkan semua nilai yang mungkin tidak praktis.LIST DEFAULT HASH

Batasan

  • Kluster Anda harus memenuhi salah satu persyaratan versi berikut. Untuk memeriksa versi kluster Anda, lihat Lihat versi kluster.

    • PolarDB for MySQL 8.0.1 dengan versi revisi 8.0.1.1.34 atau lebih baru.

    • PolarDB for MySQL 8.0.2 dengan versi revisi 8.0.2.2.1 atau lebih baru.

  • Satu atau beberapa partisi default didukung pada tingkat partisi.

  • Anda dapat menggunakan kombinasi LIST dan DEFAULT untuk subpartisi, tetapi setiap partisi hanya mendukung satu subpartisi default.

  • Jika suatu partisi hanya memiliki satu partisi default, semua jenis subpartisi didukung.

  • Jika suatu partisi memiliki beberapa partisi default, hanya subpartisi HASH atau KEY yang didukung.

Buat tabel partisi LIST DEFAULT HASH

Sintaks

PolarDB memungkinkan Anda membuat tabel partisi yang menyimpan data yang tidak sesuai dengan partisi LIST tertentu ke dalam partisi default. Jika partisi ini tumbuh terlalu besar, Anda dapat menggunakan metode HASH untuk membaginya menjadi beberapa partisi.

CREATE TABLE [ schema. ]table_name
 table_definition
   PARTITION BY LIST [COLUMNS] (expr)
   SUBPARTITION BY ...
   (list_partition_definition[, ..., list_partition_definition],
    default_partition_definition
   )

default_partition_definition adalah sebagai berikut:

PARTITION partition_name DEFAULT [PARTITIONS number]

Setiap definisi partisi juga dapat mencakup subpartisi. LIST DEFAULT juga didukung untuk subpartisi dan didefinisikan sebagai berikut:

SUBPARTITION subpartition_name DEFAULT

Parameter Description

Parameter

Deskripsi

table_name

Nama tabel yang akan dibuat.

partition_name

  • Jika hanya ada satu partisi default, parameter ini menentukan nama partisi tersebut. Nama harus unik dalam tabel.

  • Jika terdapat beberapa partisi default, parameter ini menentukan awalan nama untuk partisi-partisi tersebut. Nama partisi akhir dibentuk dengan menambahkan nomor urut ke awalan ini.

subpartition_name

Nama subpartisi. Nama harus unik dalam tabel. Setiap partisi dapat memiliki paling banyak satu subpartisi default.

number

Menentukan jumlah partisi yang akan dibuat dari partisi default menggunakan metode HASH. Klausul PARTITIONS number bersifat opsional. Jika klausul ini dihilangkan, satu partisi default akan dibuat.

Example

Contoh berikut menunjukkan cara membuat satu partisi default:

CREATE TABLE list_default (
  a INT,
  b INT
)
PARTITION BY LIST (a)
(PARTITION p0 VALUES IN (1,2,3,4,5),
 PARTITION p1 VALUES IN (6,7,8,9,10),
 PARTITION pd DEFAULT);

Contoh berikut menunjukkan cara membuat beberapa partisi default:

CREATE TABLE list_default_hash (
  a INT,
  b INT
)
PARTITION BY LIST (a)
(PARTITION p0 VALUES IN (1,2,3,4,5),
 PARTITION p1 VALUES IN (6,7,8,9,10),
 PARTITION pd DEFAULT PARTITIONS 3);

Contoh berikut menunjukkan cara menggunakan LIST COLUMNS ketika kunci partisi memiliki tipe data VARCHAR:

CREATE TABLE t_goods
(
  country   VARCHAR(30),
  year      VARCHAR(60),
  goods     TEXT
) PARTITION BY LIST COLUMNS(country)
(
  PARTITION p1 VALUES IN ('China'),
  PARTITION p2 VALUES IN ('USA'),
  PARTITION p3 VALUES IN ('Asia'),
  PARTITION p4 VALUES IN ('Singapore'),
  PARTITION p_deft DEFAULT PARTITIONS 5
);

Gunakan pernyataan EXPLAIN untuk melihat partisi:

EXPLAIN SELECT * FROM list_default_hash;

Output-nya adalah sebagai berikut:

+----+-------------+-------------------+-------------------+------+---------------+------+---------+------+------+----------+-------+
| id | select_type | table             | partitions        | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra |
+----+-------------+-------------------+-------------------+------+---------------+------+---------+------+------+----------+-------+
|  1 | SIMPLE      | list_default_hash | p0,p1,pd0,pd1,pd2 | ALL  | NULL          | NULL | NULL    | NULL |    1 |   100.00 | NULL  |
+----+-------------+-------------------+-------------------+------+---------------+------+---------+------+------+----------+-------+
1 row in set (0.04 sec)

Contoh berikut menunjukkan cara menggunakan LIST DEFAULT untuk subpartisi:

CREATE TABLE test (a int, b int)
PARTITION BY RANGE(a)
SUBPARTITION BY LIST(b) (
PARTITION part0 VALUES LESS THAN (10)
( SUBPARTITION sub0 VALUES IN (1,2,3,4,5),
  SUBPARTITION sub1 DEFAULT),
PARTITION part1 VALUES LESS THAN (20)
( SUBPARTITION sub2 VALUES IN (1,2,3,4,5),
  SUBPARTITION sub3 DEFAULT),
PARTITION part2 VALUES LESS THAN (30)
( SUBPARTITION sub4 VALUES IN (1,2,3,4,5),
  SUBPARTITION sub5 DEFAULT));

Jika suatu partisi memiliki beberapa partisi default, hanya subpartisi HASH atau KEY yang didukung:

CREATE TABLE list_default_hash_sub (
  a INT,
  b INT
)
PARTITION BY LIST (a)
SUBPARTITION BY HASH (b) SUBPARTITIONS 20
(PARTITION p0 VALUES IN (1,2,3,4,5),
 PARTITION p1 VALUES IN (6,7,8,9,10),
 PARTITION pd DEFAULT PARTITIONS 3);

Modifikasi tabel partisi LIST DEFAULT HASH

Partisi LIST DEFAULT HASH mendukung operasi seperti ALTER TABLE ADD PARTITION, ALTER TABLE DROP PARTITION, ALTER TABLE REORGANIZE PARTITION, ALTER TABLE TRUNCATE PARTITION, ALTER TABLE EXCHANGE PARTITION, ALTER TABLE OPTIMIZE PARTITION, ALTER TABLE REBUILD PARTITION, ALTER TABLE REPAIR PARTITION, ALTER TABLE ANALYZE PARTITION, dan ALTER TABLE CHECK PARTITION.

Topik ini menjelaskan cara menggunakan ALTER TABLE ADD PARTITION, ALTER TABLE DROP PARTITION, dan ALTER TABLE REORGANIZE PARTITION. Untuk informasi tentang operasi lain dalam memodifikasi tabel partisi LIST DEFAULT HASH, lihat Modifikasi tabel partisi.

ALTER TABLE ADD PARTITION

  • ADD DEFAULT PARTITION

    Sintaksis

    Untuk tabel partisi LIST standar tanpa partisi default, Anda dapat menggunakan pernyataan ADD PARTITION untuk menambahkan partisi default. Hal ini mengubah tabel menjadi tabel partisi LIST DEFAULT HASH.

    ALTER TABLE table_name ADD PARTITION(default_partition_definition)

    Example

    Contoh berikut menunjukkan cara menambahkan satu partisi default:

    CREATE TABLE list_tab (
      a INT,
      b INT
    )
    PARTITION BY LIST (a)
    (PARTITION p0 VALUES IN (1,2,3,4,5),
     PARTITION p1 VALUES IN (6,7,8,9,10)
    );
    ALTER TABLE list_tab ADD PARTITION(PARTITION pd DEFAULT);

    Contoh berikut menunjukkan cara menambahkan dua partisi default:

    CREATE TABLE list_tab (
      a INT,
      b INT
    )
    PARTITION BY LIST (a)
    (PARTITION p0 VALUES IN (1,2,3,4,5),
     PARTITION p1 VALUES IN (6,7,8,9,10)
    );
    ALTER TABLE list_tab ADD PARTITION(PARTITION pd DEFAULT PARTITIONS 2);
  • ADD LIST PARTITION

    Untuk PolarDB for MySQL 8.0.2.2.11 dan versi lebih baru, Anda dapat menggunakan opsi WITHOUT VALIDATION bersama pernyataan ALTER TABLE ADD PARTITION untuk menambahkan partisi LIST ke tabel partisi LIST DEFAULT HASH.

    Anda harus memastikan bahwa nilai untuk partisi LIST baru tersebut belum ada di partisi default. Jika sudah ada, gunakan pernyataan ALTER TABLE REORGANIZE PARTITION untuk memindahkan data dari partisi default ke partisi LIST baru.

    Sintaks

    ALTER TABLE table_name ADD PARTITION(
      list_partition_definition[, ..., list_partition_definition])
    WITHOUT VALIDATION

    Example

    Tambahkan partisi LIST baru.

    CREATE TABLE list_default_hash (
      a INT,
      b INT
    )
    PARTITION BY LIST (a)
    (PARTITION p0 VALUES IN (1,2,3,4,5),
     PARTITION p1 VALUES IN (6,7,8,9,10),
     PARTITION pd DEFAULT PARTITIONS 3);
    
    ALTER TABLE list_default_hash ADD PARTITION(
      PARTITION p2 VALUES IN (11,12,13)
    )WITHOUT VALIDATION;

    Setelah dieksekusi, partisi LIST p2 ditambahkan ke tabel list_default_hash, dan p2 tidak berisi data.

    Catatan

    Pastikan partisi default tidak berisi nilai 11, 12, dan 13 untuk kolom a. Jika tidak, setelah partisi LIST baru ditambahkan, baris-baris tersebut mungkin menjadi tidak dapat diakses.

ALTER TABLE DROP PARTITION

Untuk informasi lebih lanjut tentang sintaks DROP PARTITION, lihat DROP PARTITION.

Example

Saat menggunakan operasi DROP PARTITION, Anda harus menghapus semua partisi default sekaligus. Anda tidak dapat menghapus hanya sebagian dari partisi default.

Jalankan perintah DROP PARTITION untuk menghapus semua partisi tersebut.

ALTER TABLE list_default_hash DROP PARTITION pd0,pd1,pd2;
Query OK, 0 rows affected (0.33 sec)
Records: 0  Duplicates: 0  Warnings: 0

Pesan Kesalahan

Terjadi error jika Anda mencoba menghapus hanya sebagian dari partisi default.

ALTER TABLE list_default_hash DROP PARTITION pd0;

Perintah tersebut mengembalikan pesan error berikut:

ERROR 8078 (HY000): DROP PARTITION cannot be used on default partitions of LIST DEFAULT, except once dropping all default partitions

ALTER TABLE REORGANIZE PARTITION

Untuk informasi lebih lanjut tentang sintaks REORGANIZE PARTITION, lihat REORGANIZE PARTITION.

Example

Saat menggunakan operasi REORGANIZE PARTITION, Anda harus memodifikasi semua partisi default sekaligus. Anda tidak dapat memodifikasi hanya sebagian dari partisi default.

  • Gunakan REORGANIZE PARTITION untuk mengubah jumlah partisi default:

    ALTER TABLE list_default_hash
    REORGANIZE PARTITION
      pd0,pd1
    INTO(
      PARTITION pd DEFAULT PARTITIONS 3);

    Setelah menjalankan pernyataan ini, jumlah partisi default berubah dari dua menjadi tiga.

  • Gunakan REORGANIZE PARTITION untuk memisahkan partisi LIST baru dari partisi default:

    ALTER TABLE list_default_hash
    REORGANIZE PARTITION
      pd0,pd1
    INTO (
     PARTITION p2 VALUES IN (20,21),
     PARTITION pd DEFAULT PARTITIONS 2);

    Pernyataan ini menambahkan partisi LIST baru bernama p2 ke tabel dan memindahkan baris yang sesuai dengan VALUES IN (20,21) dari partisi default ke p2.

  • Gunakan REORGANIZE PARTITION untuk menggabungkan partisi LIST ke dalam partisi default:

    ALTER TABLE list_default_hash
    REORGANIZE PARTITION
      p2, pd0, pd1
    INTO (
     PARTITION pd DEFAULT PARTITIONS 2);

    Pernyataan ini menggabungkan partisi LIST p2 ke dalam partisi default.

  • Gunakan REORGANIZE PARTITION untuk memperluas partisi LIST dengan memindahkan nilai dari partisi default:

    ALTER TABLE list_default_hash
    REORGANIZE partition
      p2, pd0, pd1
    INTO (
      PARTITION p2 VALUES IN (20,21,22,23,24),
      PARTITION pd DEFAULT PARTITIONS 4);

    Pernyataan ini mengubah definisi p2 dari PARTITION p2 VALUES IN (20,21) menjadi PARTITION p2 VALUES IN (20,21,22,23,24). Pernyataan ini juga memindahkan data yang sesuai dari partisi default ke p2.

Topik terkait

Kapan memilih partisi LIST DEFAULT HASH