Topik ini menjelaskan cara membangun ulang indeks kolom terkluster (CCI) untuk memodifikasi definisinya tanpa memengaruhi operasi online.
Prasyarat
Indeks kolom telah dibuat.
Proses pembangunan ulang dilakukan secara online dan tidak mengakuisisi kunci. Proses ini tidak akan mengganggu beban kerja yang ada baik pada indeks kolom maupun tabel berbasis baris yang mendasarinya.
Catatan Penting
Instans Anda harus Berjalan versi 5.4.20-20250714 atau lebih baru.
Untuk informasi tentang aturan penamaan versi instans, lihat Catatan Rilis.
Untuk informasi tentang cara melihat versi sebuah instans, lihat Lihat dan perbarui versi sebuah instans.
Kapan Harus Membangun Ulang CCI
Pembangunan ulang CCI diperlukan ketika Anda perlu menyesuaikan desainnya untuk mengoptimalkan performa atau beradaptasi dengan perubahan bisnis. Skenario umum meliputi:
Untuk mengoptimalkan performa kueri: Selama pengujian awal, Anda mungkin menemukan bahwa performa indeks tidak sesuai harapan. Membangun ulang CCI dengan kunci pengurutan atau kunci partisi yang berbeda yang lebih cocok dengan pola akses data Anda dapat meningkatkan kecepatan kueri secara signifikan.
Untuk beradaptasi dengan perubahan skema atau logika bisnis: Seiring berkembangnya bisnis Anda, Anda mungkin perlu menambah, menghapus, atau memodifikasi kolom dalam tabel Anda. Jika kueri SQL terkait juga berubah, CCI yang ada mungkin tidak lagi optimal. Membangun ulang indeks memastikan tetap selaras dengan skema baru dan persyaratan kueri Anda.
Untuk menyesuaikan dengan pertumbuhan data dan distribusi: Seiring bertambahnya volume data, strategi partisi asli mungkin menjadi tidak efisien. Anda mungkin perlu membangun ulang indeks untuk mengubah kunci partisi, menyesuaikan jumlah partisi, atau mempartisi database atau tabel berdasarkan kolom waktu untuk mengelola set data besar dengan lebih baik.
Untuk mendukung fitur baru dan peningkatan: Ketika database memperkenalkan pembaruan signifikan pada fitur CCI, Anda mungkin perlu membangun ulang indeks yang ada untuk memanfaatkan kemampuan baru dan memastikan kompatibilitas.
Sintaksis
Tetapkan variabel
MAX_CCI_COUNT.Proses pembangunan ulang sementara membuat CCI baru sebelum menghapus yang lama. Untuk memungkinkan hal ini, Anda harus terlebih dahulu menaikkan jumlah maksimum CCIs yang diizinkan per tabel menjadi setidaknya 2.
SET GLOBAL MAX_CCI_COUNT = 2;CatatanJika tabel target sudah berisi beberapa CCIs, atur nilai ini lebih tinggi dari total jumlah indeks yang ada.
Membangun ulang indeks.
Anda dapat membangun ulang indeks menggunakan operasi sinkron atau asinkron.
Pembangunan Ulang Sinkron
Gunakan sintaks ALTER TABLE REBUILD untuk melakukan pembangunan ulang sinkron. Operasi ini memblokir sesi hingga pembangunan ulang selesai. Lihat Buat dan gunakan CCI untuk detail lebih lanjut.
ALTER TABLE tbl_name REBUILD CLUSTERED COLUMNAR INDEX index_name [CCI DEFINITION];CatatanTabel (
tbl_name) dan CCI (index_name) yang ditentukan harus ada. Jika tidak, kesalahan akan dikembalikan.Anda tidak dapat membangun ulang CCI yang diarsipkan.
Pembangunan Ulang Asinkron (Direkomendasikan untuk tabel besar)
Untuk tabel besar di mana proses pembangunan ulang mungkin memakan waktu lama, disarankan untuk menjalankan operasi secara asinkron.
ALTER TABLE tbl_name REBUILD CLUSTERED COLUMNAR INDEX index_name [CCI DEFINITION] ASYNC=TRUE;
Contoh
Contoh ini menunjukkan cara mengubah kunci pengurutan dan jumlah partisi untuk CCI yang ada.
Buat tabel dengan CCI awal.
Kunci pengurutan dan kunci partisi keduanya diatur ke
id.CREATE TABLE `t_order` ( `id` bigint(11) NOT NULL AUTO_INCREMENT, `order_id` varchar(20) DEFAULT NULL, `buyer_id` varchar(20) DEFAULT NULL, `seller_id` varchar(20) DEFAULT NULL, `order_snapshot` longtext, CLUSTERED COLUMNAR INDEX `cci_test` (`id`) PARTITION BY KEY(`id`) PARTITIONS 4, PRIMARY KEY (`id`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8 AUTO_INCREMENT = 2 PARTITION BY KEY(`id`) PARTITIONS 16;Membangun ulang CCI dengan definisi baru.
Kunci pengurutan diubah menjadi
seller_id, dan jumlah partisi diubah menjadi 16.ALTER TABLE `t_order` REBUILD CLUSTERED COLUMNAR INDEX `cci_test`(`seller_id`) PARTITION BY KEY(`id`) PARTITIONS 16;Verifikasi skema tabel baru.
SHOW CREATE TABLE t_order\GOutput menunjukkan bahwa definisi CCI telah berhasil diperbarui.
*************************** 1. row *************************** Table: t_order Create Table: CREATE TABLE `t_order` ( `id` bigint(11) NOT NULL AUTO_INCREMENT, `order_id` varchar(20) DEFAULT NULL, `buyer_id` varchar(20) DEFAULT NULL, `seller_id` varchar(20) DEFAULT NULL, `order_snapshot` longtext, PRIMARY KEY (`id`), CLUSTERED COLUMNAR INDEX `cci_test` (`seller_id`) PARTITION BY KEY(`id`) PARTITIONS 16 ) ENGINE = InnoDB DEFAULT CHARSET = utf8 PARTITION BY KEY(`id`) PARTITIONS 16