Sintaksis
Data dipartisi berdasarkan batas rentang. Batas waktu sering digunakan, dan batas partisi harus bertambah. Anda dapat menentukan MAXVALUE sebagai batas maksimum.
CREATE TABLE ...
PARTITION BY RANGE(partition_expr) [PARTITIONS number]
(
PARTITION part_name VALUES LESS THAN (range_bound_value),
PARTITION part_name VALUES LESS THAN (range_bound_value),
...
)
partition_expr:
partition_column
| partition_func(partition_column)
# Tentukan fungsi partisi.
partition_func:
| TO_DAYS
| TO_MONTHS
| TO_WEEKS
| TO_SECOND
| UNIX_TIMESTAMP
| MONTH
| DAYOFWEEK
| DAYOFMONTH
| DAYOFYEAR
| SUBSTR
| SUBSTRING
| RIGHT
| LEFTUntuk informasi lebih lanjut tentang perbedaan antara partisi RANGE dan partisi RANGE COLUMNS, lihat tabel Perbandingan antara partisi RANGE dan partisi RANGE COLUMNS pada topik "Ikhtisar".
Catatan penggunaan
Partisi RANGE memungkinkan penggunaan fungsi partisi untuk kunci partisi kolom tunggal. Namun, tipe data yang didukung untuk kolom kunci partisi bervariasi berdasarkan fungsi partisi.
Partisi RANGE tidak mengizinkan penggunaan fungsi partisi untuk kunci partisi vektor.
Anda tidak dapat menggunakan fungsi partisi bersarang untuk kolom kunci partisi.
Nama setiap partisi harus unik dan secara default dapat memiliki panjang hingga 16 karakter.
Jika Anda menggunakan kolom dengan tipe data sensitif zona waktu seperti TIMESTAMP sebagai kolom kunci partisi, Anda harus menggunakan fungsi partisi UNIX_TIMESTAMP untuk kolom tersebut.
Secara default, tabel terpartisi dapat berisi hingga 8.192 partisi.
Secara default, kunci partisi dapat terdiri dari hingga lima kolom kunci partisi.
Contoh
Menggunakan fungsi partisi
Tentukan kolom birthday dengan tipe DATETIME sebagai kunci partisi kolom tunggal, gunakan fungsi partisi TO_DAYS untuk mengonversi nilai kolom birthday menjadi jumlah hari, lalu lakukan partisi RANGE.
CREATE TABLE tb_r_fn(
id bigint not null auto_increment,
bid int,
name varchar(30),
birthday datetime not null,
primary key(id)
)
PARTITION BY RANGE(TO_DAYS(birthday))
(
PARTITION p1 VALUES LESS THAN(TO_DAYS('2020-01-01')),
PARTITION p2 VALUES LESS THAN(TO_DAYS('2021-01-01')),
PARTITION p3 VALUES LESS THAN(TO_DAYS('2022-01-01')),
PARTITION pm VALUES LESS THAN(MAXVALUE)
)Untuk informasi lebih lanjut tentang cara menggunakan fungsi partisi lainnya, lihat Fungsi Partisi.
Melakukan partisi tanpa menggunakan fungsi partisi
Tentukan kolom id sebagai kunci partisi kolom tunggal untuk partisi RANGE dan atur jumlah partisi menjadi 8.
CREATE TABLE tb_r(
id bigint not null auto_increment,
bid int,
name varchar(30),
birthday datetime not null,
primary key(id)
)
PARTITION BY RANGE(id)
(
PARTITION p1 VALUES LESS THAN(1000),
PARTITION p2 VALUES LESS THAN(2000),
PARTITION p3 VALUES LESS THAN(3000),
PARTITION pm VALUES LESS THAN(MAXVALUE)
)Menggunakan kunci partisi vektor
Jika kunci partisi vektor digunakan untuk partisi RANGE, partisi RANGE akan secara otomatis diubah menjadi partisi RANGE COLUMNS. Contoh kode berikut memberikan contoh partisi RANGE berdasarkan kolom bid dan id:
CREATE TABLE tb_r(
id bigint not null auto_increment,
bid int,
name varchar(30),
birthday datetime not null,
primary key(id)
)
PARTITION BY RANGE(bid,id)
(
PARTITION p1 VALUES LESS THAN(1,1000),
PARTITION p2 VALUES LESS THAN(2,2000),
PARTITION pm VALUES LESS THAN(MAXVALUE, MAXVALUE)
)Partisi RANGE sebelumnya secara otomatis diubah menjadi partisi RANGE COLUMNS. Contoh kode berikut memberikan contoh partisi RANGE COLUMNS:
CREATE TABLE tb_r(
id bigint not null auto_increment,
bid int,
name varchar(30),
birthday datetime not null,
primary key(id)
)
PARTITION BY RANGE COLUMNS(bid,id)
(
PARTITION p1 VALUES LESS THAN(1,1000),
PARTITION p2 VALUES LESS THAN(2,2000),
PARTITION pm VALUES LESS THAN(MAXVALUE, MAXVALUE)
)Batasan pada tipe data
Tipe bilangan bulat: BIGINT, BIGINT UNSIGNED, INT, INT UNSIGNED, MEDIUMINT, MEDIUMINT UNSIGNED, SMALLINT, SMALLINT UNSIGNED, TINYINT, dan TINYINT UNSIGNED.
Tipe tanggal dan waktu: DATETIME, DATE, dan TIMESTAMP.
Tipe string: CHAR dan VARCHAR.