Partisi LIST menetapkan baris ke partisi berdasarkan daftar nilai eksplisit. Setiap partisi menyimpan baris yang nilai kunci partisinya terdapat dalam daftar VALUES IN yang telah ditentukan. Tanpa partisi DEFAULT, penyisipan baris dengan nilai kunci yang tidak tercakup oleh partisi mana pun akan menghasilkan error. Tambahkan partisi DEFAULT untuk menangkap semua baris yang tidak cocok.
Untuk perbandingan antara partisi LIST dan partisi LIST COLUMNS, lihat tabel Perbandingan antara partisi LIST dan partisi LIST COLUMNS dalam topik "Ikhtisar".
Kapan menggunakan partisi LIST
Partisi LIST cocok digunakan ketika nilai kunci partisi berasal dari himpunan terbatas dan diketahui—misalnya, kode wilayah, ID kategori, atau flag status. Jika himpunan nilai unik kemungkinan terus bertambah, pertimbangkan penggunaan partisi HASH sebagai gantinya, karena menambahkan partisi baru untuk setiap nilai baru dengan cepat menjadi tidak praktis.
Sintaks
CREATE TABLE ...
PARTITION BY LIST(partition_expr) [PARTITIONS number]
(
PARTITION part_name VALUES IN (list_bound_value_set),
PARTITION part_name VALUES IN (list_bound_value_set),
...
)
partition_expr:
partition_column
| partition_func(partition_column)
list_bound_value_set:
list_bound_value[, list_bound_value, ...]
-- Fungsi partisi yang didukung
partition_func:
TO_DAYS
| TO_MONTHS
| TO_WEEKS
| TO_SECOND
| UNIX_TIMESTAMP
| MONTH
| DAYOFWEEK
| DAYOFMONTH
| DAYOFYEAR
| SUBSTR
| SUBSTRING
| RIGHT
| LEFTElemen sintaks utama:
| Elemen | Deskripsi |
|---|---|
partition_expr | Nama kolom atau fungsi partisi yang didukung yang diterapkan pada suatu kolom |
list_bound_value_set | Satu atau beberapa nilai yang dipisahkan koma yang dipetakan ke partisi ini |
DEFAULT | Nilai penangkap umum yang mengarahkan semua baris yang tidak cocok ke partisi ini |
Batasan
| Batasan | Nilai default |
|---|---|
| Maksimum partisi per tabel | 8.192 |
| Maksimum kolom dalam kunci partisi | 5 |
| Panjang maksimum nama partisi | 16 karakter |
Batasan tambahan:
Fungsi partisi didukung untuk kunci partisi kolom tunggal. Tipe data yang didukung bergantung pada fungsi yang digunakan.
Fungsi partisi tidak didukung untuk kunci partisi vektor (kunci partisi multi-kolom).
Fungsi partisi bersarang tidak didukung.
Nama partisi harus unik dalam satu tabel.
Jika kolom kunci partisi menggunakan tipe data yang sensitif terhadap zona waktu seperti
TIMESTAMP, gunakan fungsi partisiUNIX_TIMESTAMP.
Tipe data yang didukung
Tipe data berikut didukung sebagai tipe kolom kunci partisi:
| Kategori | Tipe data |
|---|---|
| Integer | BIGINT, BIGINT UNSIGNED, INT, INT UNSIGNED, MEDIUMINT, MEDIUMINT UNSIGNED, SMALLINT, SMALLINT UNSIGNED, TINYINT, TINYINT UNSIGNED |
| Tanggal dan waktu | DATETIME, DATE, TIMESTAMP |
| String | CHAR, VARCHAR |
Contoh
Kunci partisi kolom tunggal dengan fungsi partisi
Contoh berikut menggunakan kolom birthday bertipe DATETIME sebagai kunci partisi. Fungsi TO_DAYS mengonversi nilai tanggal menjadi jumlah hari, dan baris ditetapkan ke partisi berdasarkan tanggal tertentu. Partisi pm menggunakan DEFAULT untuk menangkap semua baris dengan tanggal yang tidak tercantum di p1, p2, atau p3. Tanpa partisi pm, penyisipan baris tersebut akan menghasilkan error.
CREATE TABLE tb_l_fn(
id bigint not null auto_increment,
bid int,
name varchar(30),
birthday datetime not null,
primary key(id)
)
PARTITION BY LIST(TO_DAYS(birthday))
(
PARTITION p1 VALUES IN (TO_DAYS('2020-01-01'), TO_DAYS('2020-02-01')),
PARTITION p2 VALUES IN (TO_DAYS('2021-01-01'), TO_DAYS('2021-02-01')),
PARTITION p3 VALUES IN (TO_DAYS('2022-01-01')),
PARTITION pm VALUES IN (DEFAULT)
)Untuk fungsi partisi lain yang didukung, lihat Fungsi Partisi.
Kunci partisi kolom tunggal tanpa fungsi partisi
Contoh berikut menggunakan kolom id sebagai kunci partisi, menetapkan nilai ID tertentu ke tiga partisi bernama. Baris dengan ID yang tidak tercantum di partisi mana pun akan masuk ke partisi default pm.
CREATE TABLE tb_l(
id bigint not null auto_increment,
bid int,
name varchar(30),
birthday datetime not null,
primary key(id)
)
PARTITION BY LIST(id)
(
PARTITION p1 VALUES IN (1000, 1001, 1002),
PARTITION p2 VALUES IN (2000, 2001, 2002),
PARTITION p3 VALUES IN (3000),
PARTITION pm VALUES IN (DEFAULT)
)Kunci partisi vektor (multi-kolom)
Ketika Anda menggunakan beberapa kolom sebagai kunci partisi dengan PARTITION BY LIST, PolarDB for Xscale secara otomatis mengonversi pernyataan tersebut menjadi partisi LIST COLUMNS.
Contoh berikut menggunakan birthday dan id sebagai kunci partisi dua kolom:
-- Pernyataan asli menggunakan LIST dengan kunci partisi vektor
CREATE TABLE tb_l(
id bigint not null auto_increment,
bid int,
name varchar(30),
birthday datetime not null,
primary key(id)
)
PARTITION BY LIST(birthday, id)
(
PARTITION p1 VALUES IN (('1990-04-03', 1000), ('1991-04-03', 2000)),
PARTITION p2 VALUES IN (('2000-01-03', 3000), ('2001-04-03', 3001)),
PARTITION pm VALUES IN (DEFAULT)
)PolarDB for Xscale mengonversi pernyataan di atas menjadi definisi LIST COLUMNS yang setara:
-- Partisi LIST COLUMNS yang setara setelah konversi otomatis
CREATE TABLE tb_l(
id bigint not null auto_increment,
bid int,
name varchar(30),
birthday datetime not null,
primary key(id)
)
PARTITION BY LIST COLUMNS(birthday, id)
(
PARTITION p1 VALUES IN (('1990-04-03', 1000), ('1991-04-03', 2000)),
PARTITION p2 VALUES IN (('2000-01-03', 3000), ('2001-04-03', 3001)),
PARTITION pm VALUES IN (DEFAULT)
)Langkah selanjutnya
Fungsi Partisi — fungsi yang didukung dan tipe data yang berlaku
Jenis dan kebijakan tabel partisi — bandingkan partisi LIST, LIST COLUMNS, RANGE, dan HASH