Partisi hash mendistribusikan baris ke berbagai partisi dengan menerapkan operasi modulo pada ekspresi yang diturunkan dari kunci partisi. Gunakan partisi hash ketika Anda perlu menyebarkan data secara merata ke sejumlah partisi tetap tanpa menggunakan kondisi range atau list.
Sintaks
CREATE TABLE ... PARTITION BY [LINEAR] HASH(expr) [PARTITIONS number]
( PARTITION partition_name1,
PARTITION partition_name2, ...);Parameter
| Parameter | Deskripsi |
|---|---|
expr | Ekspresi partisi. Harus mengembalikan nilai INT. Tipe string tidak didukung. |
number | Jumlah partisi hash. |
partition_name | Nama partisi. Harus unik dalam tabel. |
Cara kerja
Untuk menentukan partisi tempat suatu baris ditempatkan, PolarDB mengevaluasi ekspresi partisi dan menerapkan rumus berikut:
MOD(partition_expression, number_of_partitions)Sebagai contoh, dengan 7 partisi dan nilai ekspresi partisi 15, baris tersebut ditempatkan di partisi MOD(15, 7) = 1.
HASH vs LINEAR HASH
PolarDB mendukung dua varian partisi hash:
| HASH | LINEAR HASH | |
|---|---|---|
| Algoritma | Modulo dari nilai fungsi hash | Algoritma linear, kuadratik, atau eksponensial |
Satu-satunya perbedaan sintaksis adalah penggunaan kata kunci LINEAR dalam klausa PARTITION BY.
Contoh
Buat tabel partisi hash
CREATE TABLE sales_hash
(
s_id INT,
dept_no INT,
part_no INT,
country varchar(20),
date DATE,
amount INT,
PRIMARY KEY(s_id)
) PARTITION BY HASH (s_id)
PARTITIONS 7;Ini membuat tabel sales_hash dengan 7 partisi. Setiap baris ditempatkan ke partisi berdasarkan MOD(s_id, 7).
Buat tabel partisi LINEAR HASH
CREATE TABLE sales_linear_hash
(
s_id INT,
part_no INT,
country varchar(20),
date DATE,
amount INT,
PRIMARY KEY(s_id)
) PARTITION BY LINEAR HASH (s_id)
PARTITIONS 7;Ini membuat tabel sales_linear_hash dengan 7 partisi menggunakan algoritma linear untuk memungkinkan pemeliharaan partisi yang lebih cepat.