Gunakan Pembagian Kunci ketika kunci partisi alami Anda berupa string, tanggal, atau kolom komposit. Berbeda dengan pembagian HASH yang memerlukan ekspresi integer, Pembagian Kunci mendukung tipe kolom non-integer dan kunci partisi multi-kolom—sehingga lebih sesuai untuk sebagian besar skema dunia nyata.
Algoritma perutean untuk Pembagian Kunci di PolarDB-X menggunakan MurmurHash3, yang berbeda dari algoritma Pembagian Kunci MySQL.
Perbedaan Pembagian Kunci dan Pembagian HASH
| Perilaku | Pembagian Kunci | Pembagian HASH |
|---|---|---|
| Kunci partisi wajib | Tidak — jika kunci partisi tidak ditentukan, kunci primary digunakan secara default; jika tidak ada kunci primary, kunci unik akan digunakan | Ya — harus menentukan ekspresi atau kolom integer |
| Kunci partisi multi-kolom | Didukung (kunci partisi vektor) | Tidak didukung |
| Tipe data yang didukung | INT, STRING, DATE, DATETIME (dan subtipenya) | Hanya tipe integer |
| Fungsi partisi | Tidak didukung | Didukung |
Untuk perbandingan lengkap, lihat Perbandingan antara Pembagian Kunci dan Pembagian HASH.
Sintaksis
CREATE TABLE ...
PARTITION BY KEY(partition_column_list)
PARTITIONS number;
partition_column_list:
column_name [, column_name ...]| Parameter | Deskripsi |
|---|---|
partition_column_list | Satu atau beberapa kolom yang digunakan sebagai kunci partisi. Jika tidak ditentukan, kunci primary akan digunakan. Jika tidak ada kunci primary, kunci unik akan digunakan. |
number | Jumlah partisi. Maksimum: 8.192. |
Contoh
Kunci partisi satu kolom
Buat partisi tabel berdasarkan kolom id menjadi 8 partisi:
CREATE TABLE tb_k(
id bigint NOT NULL AUTO_INCREMENT,
bid int,
name varchar(30),
birthday datetime NOT NULL,
PRIMARY KEY(id)
)
PARTITION BY KEY(id)
PARTITIONS 8;Kunci partisi vektor (multi-kolom)
Gunakan bid dan id sebagai kunci partisi dua kolom, dengan 8 partisi:
CREATE TABLE tb_k(
id bigint NOT NULL AUTO_INCREMENT,
bid int,
name varchar(30),
birthday datetime NOT NULL,
PRIMARY KEY(id)
)
PARTITION BY KEY(bid, id)
PARTITIONS 8;Dengan kunci partisi vektor, hanya kolom pertama (bid dalam contoh ini) yang menentukan ke partisi mana suatu baris ditempatkan. Kolom sisanya (id) tidak digunakan untuk perutean—keberadaannya bertujuan mendukung pemisahan partisi data panas. Pemangkasan partisi berlaku ketika kueri mencakup kondisi kesetaraan pada kolom utama (bid).
Batasan
Tipe data yang didukung
| Kategori | Tipe |
|---|---|
| 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, BINARY |
| Titik tetap | DECIMAL (digit pecahan harus 0) |
Batasan lainnya
Pembagian Kunci tidak mendukung fungsi partisi.
Secara default, tabel terpartisi dapat memiliki maksimal 8.192 partisi.
Secara default, kunci partisi dapat mencakup maksimal lima kolom.
Distribusi data
Pembagian Kunci menggunakan MurmurHash3, yang memiliki tingkat tabrakan hash rendah dan performa tinggi. Distribusi di seluruh partisi menjadi seimbang ketika kunci partisi memiliki lebih dari 3.000 nilai unik; semakin banyak nilai unik, distribusinya semakin merata.