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.
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 |
|
|
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 |
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 PARTITIONuntuk 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 VALIDATIONbersama pernyataanALTER TABLE ADD PARTITIONuntuk 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 PARTITIONuntuk memindahkan data dari partisi default ke partisi LIST baru.Sintaks
ALTER TABLE table_name ADD PARTITION( list_partition_definition[, ..., list_partition_definition]) WITHOUT VALIDATIONExample
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
p2ditambahkan ke tabellist_default_hash, danp2tidak berisi data.CatatanPastikan 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 PARTITIONuntuk 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 PARTITIONuntuk 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
p2ke tabel dan memindahkan baris yang sesuai denganVALUES IN (20,21)dari partisi default kep2. -
Gunakan
REORGANIZE PARTITIONuntuk 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
p2ke dalam partisi default. -
Gunakan
REORGANIZE PARTITIONuntuk 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
p2dariPARTITION p2 VALUES IN (20,21)menjadiPARTITION p2 VALUES IN (20,21,22,23,24). Pernyataan ini juga memindahkan data yang sesuai dari partisi default kep2.