Pembagian berdasarkan RANGE COLUMNS memperluas pembagian RANGE standar dengan dua kemampuan utama: dukungan untuk beberapa kolom partisi dan tipe data non-integer, termasuk string, DATE, dan DATETIME. Gunakan fitur ini ketika pembagian RANGE yang hanya mendukung integer atau satu kolom tidak memenuhi kebutuhan distribusi data Anda.
Untuk perbandingan lengkap, lihat ikhtisar tipe partisi.
Sintaksis
CREATE TABLE ...
PARTITION BY RANGE COLUMNS (partition_column_list) [PARTITIONS number]
(
PARTITION part_name VALUES LESS THAN (range_bound_value_list),
PARTITION part_name VALUES LESS THAN (range_bound_value_list),
...
)
partition_column_list:
partition_column[, partition_column, ...]
range_bound_value_list:
range_bound_value[, range_bound_value, ...]Batas partisi harus bersifat strictly increasing. Gunakan MAXVALUE sebagai batas atas partisi terakhir untuk menangkap semua baris yang tersisa.
Tipe data yang didukung
| Kategori tipe | Tipe yang didukung |
|---|---|
| Tipe integer | BIGINT, BIGINT UNSIGNED, INT, INT UNSIGNED, MEDIUMINT, MEDIUMINT UNSIGNED, SMALLINT, SMALLINT UNSIGNED, TINYINT, TINYINT UNSIGNED |
| Tipe tanggal dan waktu | DATETIME, DATE |
| Tipe string | CHAR, VARCHAR |
| Tipe fixed-point | DECIMAL (digit pecahan harus 0) |
Batasan
| Limit | Nilai default |
|---|---|
| Fungsi partisi | Tidak didukung — sebutkan nama kolom secara langsung |
| Jumlah maksimum partisi per tabel | 8.192 |
| Jumlah maksimum kolom per kunci partisi | 5 |
| Panjang maksimum nama partisi | 16 karakter (harus unik) |
Contoh
Partisi berdasarkan kunci komposit (tanggal dan ID)
Buat partisi catatan berdasarkan kunci komposit birthday dan id untuk membuat rentang berbasis tahun dengan sub-rentang berbasis ID di dalam setiap tahun:
CREATE TABLE tb_rc(
id BIGINT NOT NULL AUTO_INCREMENT,
bid INT,
name VARCHAR(30),
birthday DATETIME NOT NULL,
PRIMARY KEY(id)
)
PARTITION BY RANGE COLUMNS(birthday, id)
(
PARTITION p1 VALUES LESS THAN('2020-01-01', 1000),
PARTITION p2 VALUES LESS THAN('2021-01-01', 2000),
PARTITION p3 VALUES LESS THAN('2022-01-01', 3000),
PARTITION pm VALUES LESS THAN(MAXVALUE, MAXVALUE)
);Partisi terakhir pm menggunakan MAXVALUE untuk kedua kolom, sehingga menangkap semua baris yang tidak sesuai dengan batas sebelumnya.