全部产品
Search
文档中心

PolarDB:Mengubah tabel non-partisi menjadi tabel terpartisi rentang

更新时间:Jul 06, 2025

PolarDB memungkinkan Anda mengonversi tabel non-partisi menjadi tabel terpartisi rentang secara mulus tanpa perlu mendistribusikan ulang data. Topik ini menjelaskan cara melakukan konversi tersebut di PolarDB.

Informasi latar belakang

Ketika PolarDB mengonversi tabel non-partisi menjadi tabel terpartisi rentang, data dari tabel non-partisi dipindahkan ke partisi pertama tanpa verifikasi. Partisi lainnya dibiarkan kosong. Dalam banyak kasus, fitur ini digunakan di PolarDB untuk mentransfer data historis ke partisi pertama tanpa perlu menulis ulang data menggunakan pernyataan ALTER PARTITION BY. Hal ini memungkinkan Anda dengan cepat mengonversi tabel non-partisi menjadi tabel terpartisi rentang.

Catatan

Untuk informasi lebih lanjut tentang cara mengonversi tabel non-partisi menjadi tabel terpartisi rentang dengan cepat, bergabunglah dengan grup DingTalk 24490017825 untuk mendapatkan dukungan teknis.

Prasyarat

Kluster Anda menjalankan PolarDB for MySQL 8.0.2 dengan versi revisi 8.0.2.2.10 atau yang lebih baru. Untuk informasi tentang cara melihat versi kluster Anda, lihat bagian "Query the engine version" dari topik Versi Mesin.

Batasan

Jika tabel non-partisi berisi bidang yang ditambahkan menggunakan pernyataan INSTANT ADD COLUMN, Anda tidak dapat mengonversi tabel tersebut menjadi tabel terpartisi rentang.

Penggunaan

Mengonversi tabel non-partisi menjadi tabel terpartisi rentang

Syntax

Tambahkan kata kunci WITHOUT VALIDATION ke dalam pernyataan ALTER TABLE.

ALTER TABLE table_name
PARTITION BY RANGE {(expr) | COLUMNS(column_list)}
(partition_definition [, partition_definition] ...)
WITHOUT VALIDATION;

partition_definition:

PARTITION partition_name
       VALUES LESS THAN {(value | value_list) | MAXVALUE}

Parameters

Parameter

Deskripsi

table_name

Nama tabel.

column_list

Daftar kolom kunci partisi. Ekspresi tidak didukung.

RANGE(expr)

Ekspresi yang digunakan untuk partisi rentang.

partition_name

Nama partisi.

value_list

Nilai-nilai partisi.

MAXVALUE

Nilai maksimum dalam partisi.

Example

Mengonversi tabel non-partisi t1 menjadi 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;

Semua data dalam tabel t1 dipindahkan ke partisi p0 tanpa verifikasi. Jika Anda yakin bahwa semua data dalam tabel non-partisi berada dalam rentang nilai partisi p0, Anda dapat menjalankan pernyataan ini untuk mengonversi tabel non-partisi menjadi tabel terpartisi rentang.

Catatan
  • Pastikan bahwa semua data dalam tabel non-partisi berada dalam rentang nilai partisi pertama dari tabel terpartisi. Jika tidak, data yang berada di luar rentang nilai mungkin tidak dapat diambil setelah tabel dikonversi menjadi tabel terpartisi.

  • Jika Anda menggunakan opsi WITHOUT VALIDATION, sistem memindahkan semua data dari tabel non-partisi ke partisi pertama dari tabel terpartisi tujuan tanpa melakukan validasi. Pastikan bahwa batas-batas partisi pertama didefinisikan untuk menampung semua data dari tabel non-partisi.

Penggunaan pada tabel terpartisi lainnya

Kata kunci WITHOUT VALIDATION untuk mengonversi tabel non-partisi menjadi tabel terpartisi rentang dapat digunakan untuk tabel terpartisi INTERVAL untuk secara otomatis membuat partisi RANGE pada interval yang sama.

Example

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;

Kinerja

Dibandingkan dengan mekanisme yang digunakan di MySQL asli untuk mengonversi tabel non-partisi menjadi tabel terpartisi, fitur yang digunakan di PolarDB untuk mengonversi tabel non-partisi menjadi tabel terpartisi rentang hanya mengubah metadata tabel dan tidak menulis ulang data tabel. Oleh karena itu, hanya dibutuhkan waktu kurang dari 0,1 detik untuk mengonversi tabel. Mekanisme yang digunakan di MySQL asli untuk mengonversi tabel non-partisi menjadi tabel terpartisi memerlukan verifikasi dan penulisan ulang data. Oleh karena itu, waktu yang lebih lama diperlukan. Durasi konversi meningkat berdasarkan ukuran data tabel.

Ukuran tabel

Di MySQL asli

Di PolarDB

1 GB (6.001.215 baris)

52,24 detik

0,10 detik

10 GB (59.986.052 baris)

8 menit 45,82 detik

0,07 detik