Partisi rentang membagi data tabel ke dalam partisi berdasarkan nilai kolom yang berada dalam rentang tertentu. Setiap partisi menyimpan baris-baris dengan kunci partisi yang nilainya kurang dari batas atas yang ditentukan, dan batas-batas tersebut harus bersifat inkremental secara ketat.
Partisi rentang cocok digunakan saat Anda perlu:
Menjalankan kueri atau menghapus data berdasarkan periode waktu — hapus seluruh partisi alih-alih menjalankan pernyataan
DELETEdengan filter tanggal, yang jauh lebih cepat pada tabel besar.Membuat partisi berdasarkan rentang numerik kontinu — misalnya jumlah penjualan, ID, atau skor.
Meningkatkan performa kueri melalui pemangkasan partisi — kueri yang difilter berdasarkan kunci partisi dapat melewati partisi yang tidak relevan sepenuhnya.
PolarDB for MySQL mendukung dua bentuk: PARTITION BY RANGE (berbasis ekspresi, satu kolom) dan PARTITION BY RANGE COLUMNS (berbasis kolom, mendukung beberapa kolom dan tipe data yang lebih luas).
Sintaks
CREATE TABLE ... PARTITION BY RANGE {(expr) | COLUMNS(column_list)}
(partition_definition [, partition_definition] ...);Dengan partition_definition sebagai:
PARTITION partition_name
VALUES LESS THAN {(value | value_list) | MAXVALUE}Parameter
| Parameter | Deskripsi |
|---|---|
expr | Ekspresi partisi. Harus menghasilkan nilai bertipe INT. Tipe string tidak didukung. |
column_list | Daftar kolom kunci partisi untuk digunakan dengan RANGE COLUMNS. Ekspresi tidak didukung; hanya nama kolom yang diperbolehkan. |
value | Nilai batas atas untuk suatu partisi. |
value_list | Daftar nilai batas atas, satu untuk setiap kolom. Digunakan dengan RANGE COLUMNS saat beberapa kunci partisi ditentukan. |
MAXVALUE | Nilai maksimum partisi. Selalu tambahkan partisi MAXVALUE sebagai partisi terakhir untuk memastikan semua baris memiliki partisi yang sesuai. |
partition_name | Nama partisi. Harus unik dalam tabel. |
RANGE vs RANGE COLUMNS
| Fitur | PARTITION BY RANGE | PARTITION BY RANGE COLUMNS |
|---|---|---|
| Jumlah kunci partisi | Hanya satu kolom | Satu atau lebih kolom |
| Ekspresi | Didukung | Tidak didukung; hanya nama kolom |
| Tipe data yang didukung | INT (ekspresi harus menghasilkan nilai INT) | INT, tipe string, DATE, DATETIME |
Gunakan RANGE COLUMNS saat Anda perlu membuat partisi langsung berdasarkan kolom DATE atau DATETIME, atau saat Anda memerlukan kunci partisi komposit yang mencakup beberapa kolom.
Contoh
Partisi berdasarkan rentang numerik
Contoh berikut membuat partisi pada tabel penjualan berdasarkan kolom amount. Setiap partisi menyimpan baris-baris dengan nilai amount yang kurang dari nilai batas. Partisi terakhir menggunakan MAXVALUE untuk menampung semua baris tersisa.
CREATE TABLE sales_range
(
dept_no INT,
part_no INT,
country VARCHAR(20),
date DATE,
amount INT
)
PARTITION BY RANGE(amount)
(
PARTITION p0 VALUES LESS THAN (1000),
PARTITION p1 VALUES LESS THAN (2000),
PARTITION p2 VALUES LESS THAN (3000),
PARTITION p3 VALUES LESS THAN (MAXVALUE)
);Partisi berdasarkan kolom tanggal (RANGE COLUMNS)
RANGE COLUMNS memungkinkan Anda membuat partisi langsung pada kolom DATE tanpa membungkusnya dalam ekspresi. Contoh berikut membuat partisi bulanan berdasarkan kolom create_date.
CREATE TABLE sales_range_columns
(
dept_no INT,
part_no INT,
country VARCHAR(20),
create_date DATE,
amount INT
)
PARTITION BY RANGE COLUMNS(create_date)
(
PARTITION p1 VALUES LESS THAN ('2023-01-01'),
PARTITION p2 VALUES LESS THAN ('2023-02-01'),
PARTITION p3 VALUES LESS THAN ('2023-03-01'),
PARTITION p4 VALUES LESS THAN ('2023-04-01')
);Partisi berdasarkan beberapa kolom (RANGE COLUMNS)
RANGE COLUMNS mendukung kunci partisi komposit.
CREATE TABLE sales_range_columns
(
dept_no INT,
part_no INT,
country VARCHAR(20),
date DATE,
amount INT
)
PARTITION BY RANGE COLUMNS(dept_no, part_no)
(
PARTITION p1 VALUES LESS THAN (1000, MAXVALUE),
PARTITION p2 VALUES LESS THAN (2000, MAXVALUE),
PARTITION p3 VALUES LESS THAN (3000, MAXVALUE),
PARTITION p4 VALUES LESS THAN (4000, MAXVALUE)
);