PolarDB for MySQL dapat dengan cepat mengonversi tabel non-partisi menjadi tabel terpartisi rentang tanpa redistribusi data. Topik ini menjelaskan cara menggunakan PolarDB untuk melakukan konversi tersebut.
Informasi latar belakang
PolarDB Saat Anda mengonversi tabel non-partisi menjadi tabel terpartisi rentang, data dalam tabel non-partisi ditempatkan ke partisi pertama tanpa validasi, sedangkan partisi lainnya tetap kosong. PolarDB Metode ini umumnya digunakan untuk mengarsipkan data historis ke partisi pertama dan menghindari penulisan ulang data yang biasanya diperlukan oleh sintaks standar ALTER PARTITION BY, sehingga mempercepat proses konversi.
Lingkup penerapan
MySQL 8.0.2: Versi revisi harus 8.0.2.2.19 atau lebih baru.
MySQL 8.0.1: Versi revisi harus 8.0.1.1.34 atau lebih baru.
Jika tabel memiliki kolom
INSTANTatau indeks penyimpanan kolom (IMCI), versi kluster harus MySQL 8.0.2 dan versi revisi harus 8.0.2.2.36 atau lebih baru.
Anda dapat menanyakan versi engine untuk memeriksa versi kluster.
Batasan
Jika suatu tabel memiliki kolom yang ditambahkan melalui pernyataan INSTANT ADD COLUMN, tabel tersebut tidak dapat dikonversi menjadi tabel terpartisi rentang.
Petunjuk
Sintaks dan contoh
Sintaks
Dalam pernyataan ALTER TABLE, tambahkan kata kunci
WITHOUT VALIDATION.ALTER TABLE table_name PARTITION BY RANGE {(expr) | COLUMNS(column_list)} (partition_definition [, partition_definition] ...) WITHOUT VALIDATION;di mana
partition_definition:PARTITION partition_name VALUES LESS THAN {(value | value_list) | MAXVALUE}Parameter
Parameter
Parameter
table_name
Nama tabel.
column_list
Tipe LIST COLUMNS. Daftar kunci partisi. Ekspresi tidak didukung.
RANGE(expr)
Ekspresi yang digunakan untuk partisi rentang.
partition_name
Nama partisi.
value_list
Nilai batas partisi.
MAXVALUE
Nilai maksimum.
Contoh
Mengonversi tabel non-partisi
t1menjadi tabel terpartisi rentang.CREATE TABLE t1 ( `a` int , `b` int , Primary Key(a, b)); insert into t1 values(1,1),(2,1),(3,1),(4,1),(111,111),(3333,333); alter table t1 partition by range(a) ( partition p0 values less than (100), partition p1 values less than (200) ) WITHOUT VALIDATION;t1, semua data dipindahkan kepartition p0tanpa validasi. Jika Anda yakin bahwa seluruh data dalam tabel non-partisi berada dalam batas yang didefinisikan olehp0, Anda dapat menggunakan sintaks ini untuk mengonversi tabel non-partisi menjadi tabel terpartisi rentang secara cepat.CatatanPastikan bahwa semua data dalam tabel non-partisi berada dalam batas partisi pertama. Jika tidak, setelah konversi, data yang tidak memenuhi aturan partisi mungkin tidak dapat diambil.
Ketika opsi WITHOUT VALIDATION digunakan, semua data dalam tabel non-partisi dipindahkan ke partisi pertama tanpa validasi. Pastikan batas partisi yang ditentukan dalam pernyataan DDL sesuai dengan semua data dalam tabel non-partisi.
Sintaks gabungan
WITHOUT VALIDATION dapat digunakan bersama tabel terpartisi INTERVAL, yang secara otomatis membuat partisi RANGE pada interval yang sama. Contoh:
CREATE TABLE t1(
ID int,
DATE DATE,
PRIMARY KEY (ID,DATE)
);
ALTER TABLE t1
partition by RANGE COLUMNS(date) INTERVAL(DAY, 1) (
PARTITION p0 VALUES LESS THAN ('2023-01-31')
) without validation;Perbandingan performa
PolarDB dibandingkan dengan metode MySQL native, mengonversi tabel non-partisi menjadi tabel terpartisi rentang di PolarDB for MySQL hanya memperbarui metadata tabel dan tidak menulis ulang data. Konversi selesai dalam waktu kurang dari 0,1 detik. Metode MySQL native harus memvalidasi dan menulis ulang data, yang membutuhkan waktu lebih lama seiring bertambahnya volume data.
Ukuran tabel | MySQL ALTER TABLE PARTITION BY standar | PolarDBSintaks dan contoh |
1 GB (6001215 baris) | 52,24 detik | 0,10 detik |
10 GB (59986052 baris) | 8 menit 45,82 detik | 0,07 detik |