Topik ini menjelaskan cara merestrukturisasi partisi dalam tabel terpartisi daftar atau tabel terpartisi rentang menggunakan klausa REORGANIZE PARTITION dalam pernyataan ALTER TABLE. Sistem secara otomatis mendistribusikan ulang data untuk mencocokkan definisi partisi baru berdasarkan klausa tersebut. Tidak ada data yang hilang selama proses restrukturisasi.
Contoh
Membagi partisi | Menggabungkan partisi Anda hanya dapat menggabungkan partisi yang memiliki nilai rentang berurutan. |
Modifikasi partisi | |
Sintaksis
ALTER TABLE table_name
REORGANIZE PARTITION partition_names INTO (partition_definitions)
partition_definitions: {list_partition | range_partition}
subpartition_definition: {list_subpartition | range_subpartition | hash_subpartition | key_subpartition}Parameter | Deskripsi |
table_name | Nama tabel. |
partition_names | Daftar nama partisi yang dipisahkan koma yang ingin Anda gabungkan atau bagi. |
partition_definitions | Daftar definisi partisi baru yang dipisahkan koma. |
partition_name | Nama partisi yang ingin Anda buat. Catatan Nama partisi harus unik di antara semua partisi dan subpartisi, serta harus mengikuti konvensi penamaan untuk pengenal objek. |
subpartition_name | Nama subpartisi yang ingin Anda buat. Catatan Nama subpartisi harus unik di antara semua partisi dan subpartisi, serta harus mengikuti konvensi penamaan untuk pengenal objek. |
Contoh
Persiapkan data
-- Buat tabel penjualan yang terpartisi rentang berdasarkan tahun dan lebih lanjut ter-subpartisi hash berdasarkan kuartal.
CREATE TABLE sales_data (
order_id INT AUTO_INCREMENT,
order_date DATE NOT NULL,
amount DECIMAL(10,2),
PRIMARY KEY (order_id, order_date) -- Kunci utama harus mencakup kunci partisi.
)
PARTITION BY RANGE (YEAR(order_date))
SUBPARTITION BY HASH( QUARTER(order_date) )
SUBPARTITIONS 4 ( -- Secara default, setiap partisi induk memiliki empat subpartisi.
PARTITION p2019_2020 VALUES LESS THAN (2021),
PARTITION p2021 VALUES LESS THAN (2022),
PARTITION p2022 VALUES LESS THAN (2023),
PARTITION p_future VALUES LESS THAN MAXVALUE
);
-- Masukkan data uji.
INSERT INTO sales_data (order_date, amount) VALUES
('2020-03-15', 100.00), -- p2019_2020
('2021-06-20', 200.00), -- p2021
('2022-09-10', 300.00), -- p2022
('2023-12-25', 400.00); -- p_futureMembagi partisi
Pisahkan partisi p2019_2020 menjadi partisi p2019 dan p2020.
ALTER TABLE sales_data
REORGANIZE PARTITION p2019_2020 INTO (
PARTITION p2019 VALUES LESS THAN (2020) (
SUBPARTITION s2019_q1,
SUBPARTITION s2019_q2,
SUBPARTITION s2019_q3,
SUBPARTITION s2019_q4
),
PARTITION p2020 VALUES LESS THAN (2021) (
SUBPARTITION s2020_q1,
SUBPARTITION s2020_q2,
SUBPARTITION s2020_q3,
SUBPARTITION s2020_q4
)
);Menggabungkan partisi
Gabungkan partisi p2021 dan p2022 menjadi satu partisi p2021_2022.
ALTER TABLE sales_data
REORGANIZE PARTITION p2021, p2022 INTO (
PARTITION p2021_2022 VALUES LESS THAN (2023) (
SUBPARTITION s2021_2022_q1,
SUBPARTITION s2021_2022_q2,
SUBPARTITION s2021_2022_q3,
SUBPARTITION s2021_2022_q4
)
);Modifikasi partisi
Ubah empat partisi p2019, p2020, p2021_2022, dan p_future menjadi tiga partisi p2019, p2020_2021, dan p2022_future.
ALTER TABLE sales_data
REORGANIZE PARTITION p2019, p2020, p2021_2022, p_future INTO (
PARTITION p2019 VALUES LESS THAN (2020) (
SUBPARTITION s2019_q1,
SUBPARTITION s2019_q2,
SUBPARTITION s2019_q3,
SUBPARTITION s2019_q4
),
PARTITION p2020_2021 VALUES LESS THAN (2022) (
SUBPARTITION s2020_2021_q1,
SUBPARTITION s2020_2021_q2,
SUBPARTITION s2020_2021_q3,
SUBPARTITION s2020_2021_q4
),
PARTITION p2022_future VALUES LESS THAN MAXVALUE (
SUBPARTITION s2022_future_1,
SUBPARTITION s2022_future_2,
SUBPARTITION s2022_future_3,
SUBPARTITION s2022_future_4
)
);