All Products
Search
Document Center

PolarDB:Mengonversi tabel non-partisi menjadi tabel terpartisi rentang

Last Updated:Aug 07, 2026

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 INSTANT atau 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 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;

    t1, semua data dipindahkan kepartition p0 tanpa 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.

    Catatan
    • Pastikan 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