Partisi LIST COLUMNS merupakan varian dari partisi LIST yang mendukung beberapa kolom kunci partisi dan tidak memerlukan fungsi partisi untuk mengonversi nilai kolom menjadi bilangan bulat. Anda dapat langsung menggunakan kolom bertipe string, date, dan datetime sebagai kunci partisi. Untuk perbandingan antara kedua metode tersebut, lihat tabel Perbandingan antara partisi LIST dan partisi LIST COLUMNS dalam ikhtisar.
Sintaks
Setiap partisi mencantumkan nilai eksak dari kolom yang termasuk di dalamnya. Nilai tersebut harus unik di seluruh partisi. Gunakan partisi DEFAULT opsional sebagai penangkap semua baris yang tidak sesuai dengan partisi lainnya.
CREATE TABLE ...
PARTITION BY LIST COLUMNS(partition_column_list) [PARTITIONS number]
(
PARTITION part_name VALUES IN (list_bound_value_set),
PARTITION part_name VALUES IN (list_bound_value_set),
...
[ PARTITION part_name VALUES IN (DEFAULT) ]
)
partition_column_list:
partition_column[, partition_column, partition_column, ...]
list_bound_value_set:
list_bound_value[, list_bound_value, list_bound_value, ...]Batasan
Partisi LIST COLUMNS tidak mendukung fungsi partisi.
Tabel terpartisi dapat berisi hingga 8.192 partisi secara default.
Kunci partisi dapat terdiri dari hingga lima kolom secara default.
Nama setiap partisi harus unik dan panjangnya dapat mencapai 16 karakter secara default.
Untuk menggunakan kolom TIMESTAMP sebagai kolom kunci partisi, terapkan fungsi
UNIX_TIMESTAMPpada kolom tersebut.
Tipe data yang didukung
Partisi LIST COLUMNS mendukung tipe data berikut untuk kolom kunci partisi:
Tipe integer: BIGINT, BIGINT UNSIGNED, INT, INT UNSIGNED, MEDIUMINT, MEDIUMINT UNSIGNED, SMALLINT, SMALLINT UNSIGNED, TINYINT, TINYINT UNSIGNED
Tipe tanggal dan waktu: DATETIME, DATE, TIMESTAMP
Tipe string: CHAR, VARCHAR
Tipe fixed-point: DECIMAL (digit pecahan harus 0)
Contoh
Partisi berdasarkan kolom string
Kasus penggunaan umum adalah mengarahkan baris ke partisi berdasarkan kolom string, seperti Wilayah atau kategori. Contoh berikut membuat tabel customer yang dipartisi berdasarkan nama kota, dengan mengelompokkan kota-kota ke dalam wilayah penjualan:
CREATE TABLE customers (
id BIGINT NOT NULL AUTO_INCREMENT,
name VARCHAR(50),
city VARCHAR(30),
PRIMARY KEY (id)
)
PARTITION BY LIST COLUMNS(city)
(
PARTITION p_north VALUES IN ('Beijing', 'Tianjin', 'Shenyang'),
PARTITION p_east VALUES IN ('Shanghai', 'Nanjing', 'Hangzhou'),
PARTITION p_south VALUES IN ('Guangzhou', 'Shenzhen', 'Xiamen'),
PARTITION p_other VALUES IN (DEFAULT)
);p_other menangkap semua baris di mana city tidak sesuai dengan nilai yang tercantum.
Partisi berdasarkan kunci partisi komposit
Gunakan kunci partisi komposit (beberapa kolom) ketika baris perlu diarahkan berdasarkan kombinasi nilai. Contoh berikut mempartisi pesanan berdasarkan birthday dan id:
CREATE TABLE tb_lc (
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 (('2020-01-01', 1000), ('2020-01-01', 2000)),
PARTITION p2 VALUES IN (('2021-01-01', 1000), ('2021-01-01', 2000)),
PARTITION p3 VALUES IN (('2022-01-01', 1000), ('2022-01-01', 2000)),
PARTITION pm VALUES IN (DEFAULT)
);pm adalah partisi DEFAULT yang menangkap baris yang tidak sesuai dengan p1, p2, atau p3.
Ketika daftar nilai diskrit menjadi sangat panjang (misalnya, ratusan tanggal), partisi RANGE COLUMNS biasanya lebih praktis untuk didefinisikan dan dipelihara.