全部产品
Search
文档中心

PolarDB:Jalankan Pernyataan DDL untuk Membuat dan Menghapus IMCI secara Dinamis

更新时间:Jul 06, 2025

Topik ini menjelaskan cara menggunakan pernyataan DDL untuk membuat dan menghapus Indeks Kolom dalam Memori (IMCI) setelah tabel dibuat.

Prasyarat

Setelah menambahkan node penyimpanan kolom hanya-baca ke kluster dan mengonfigurasi titik akhir kluster, Anda dapat terhubung ke kluster menggunakan titik akhir kluster dan menggunakan pernyataan SQL untuk membuat serta mengelola IMCI.

  • Node penyimpanan kolom hanya-baca telah ditambahkan. Untuk informasi lebih lanjut, lihat Tambahkan node penyimpanan kolom hanya-baca.

  • Titik akhir kluster telah dikonfigurasi. Solusi distribusi permintaan manual dan otomatis dapat digunakan untuk mendistribusikan permintaan ke node penyimpanan baris dan kolom. Anda dapat memilih solusi distribusi permintaan berdasarkan kebutuhan bisnis Anda dan mengonfigurasi titik akhir kluster. Untuk informasi lebih lanjut, lihat Ikhtisar Distribusi Permintaan.

  • Kluster database terhubung menggunakan titik akhir kluster. Untuk informasi lebih lanjut, lihat Hubungkan ke Kluster.

Buat IMCI

  • Sintaks:

    • Tambahkan bidang COMMENT 'COLUMNAR=1' ke pernyataan ALTER TABLE untuk membuat IMCI yang valid untuk seluruh tabel.

    • Tambahkan bidang COMMENT 'COLUMNAR=1' ke pernyataan ALTER TABLE ... MODIFY COLUMN ... untuk membuat IMCI yang valid untuk kolom tertentu.

      Catatan
      • Jika kluster dihubungkan menggunakan Data Management (DMS), kami sarankan agar Anda tidak menggunakan proses perubahan skema tanpa kunci untuk memodifikasi bidang COMMENT.

      • Untuk PolarDB for MySQL 8.0.1.1.25 dan versi lebih baru, IMCI mendukung tipe data BLOB dan TEXT.

      • Untuk PolarDB for MySQL 8.0.1.1.28 dan versi lebih baru, IMCI mendukung tipe data ENUM.

      • Untuk PolarDB for MySQL 8.0.1.1.29 dan versi lebih baru, Anda dapat membuat IMCI pada tabel terpartisi.

      • Untuk PolarDB for MySQL 8.0.1.1.30 dan versi lebih baru, IMCI mendukung tipe data BIT, JSON, dan Geo.

      • IMCI tidak mendukung tipe data SET.

      • Jika tabel atau kolom sudah memiliki komentar, Anda dapat menambahkan COLUMNAR=1 ke komentar tersebut. Kami sarankan Anda menambahkan COLUMNAR=1 sebelum isi komentar. Sebagai contoh, jika komentar aslinya adalah COMMENT 'abc', komentar akhir setelah Anda menambahkan COLUMNAR=1 adalah COMMENT 'COLUMNAR=1abc'.

  • Contoh:

    CREATE TABLE t5(
      col1 INT,
      col2 DATETIME,
      col3 VARCHAR(200)
    ) ENGINE InnoDB;
    
    -- Buat IMCI yang valid untuk tabel.
    ALTER TABLE t5 COMMENT 'COLUMNAR=1';
    
    -- Buat IMCI yang valid untuk kolom tertentu.
    ALTER TABLE t5 MODIFY COLUMN col1 INT COMMENT 'COLUMNAR=1',
                   MODIFY COLUMN col2 DATETIME COMMENT 'COLUMNAR=1';

Hapus IMCI

  • Sintaks:

    • Tambahkan bidang COMMENT 'COLUMNAR=0' ke pernyataan ALTER TABLE untuk menghapus IMCI yang valid untuk seluruh tabel.

    • Tambahkan bidang COMMENT 'COLUMNAR=0' ke pernyataan ALTER TABLE ... MODIFY COLUMN ... untuk menghapus IMCI yang valid untuk kolom tertentu.

      Catatan
      • Untuk PolarDB for MySQL 8.0.1.1.25 dan versi lebih baru, IMCI mendukung tipe data BLOB dan TEXT.

      • Untuk PolarDB for MySQL 8.0.1.1.28 dan versi lebih baru, IMCI mendukung tipe data ENUM.

      • Untuk PolarDB for MySQL 8.0.1.1.29 dan versi lebih baru, Anda dapat membuat IMCI pada tabel terpartisi.

      • Untuk PolarDB for MySQL 8.0.1.1.30 dan versi lebih baru, IMCI mendukung tipe data BIT, JSON, dan Geo.

      • IMCI tidak mendukung tipe data SET.

      • Jika tabel atau kolom sudah memiliki komentar, Anda dapat menambahkan COLUMNAR=0 ke komentar tersebut. Kami sarankan Anda menambahkan COLUMNAR=0 sebelum isi komentar. Sebagai contoh, jika komentar aslinya adalah COMMENT 'abc', komentar akhir setelah Anda menambahkan COLUMNAR=0 adalah COMMENT 'COLUMNAR=0abc'.

  • Contoh:

    -- Buat IMCI yang valid untuk kolom tertentu.
    CREATE TABLE t6(
      col1 INT COMMENT 'COLUMNAR=1',
      col2 DATETIME COMMENT 'COLUMNAR=1',
      col3 VARCHAR(200)
    ) ENGINE InnoDB;
    
    -- Hapus IMCI yang valid untuk kolom tertentu.
    ALTER TABLE t6 MODIFY COLUMN col1 INT COMMENT 'COLUMNAR=0',
                   MODIFY COLUMN col2 DATETIME COMMENT 'COLUMNAR=0';
    
    -- Buat IMCI yang valid untuk tabel.
    CREATE TABLE t7(
      col1 INT,
      col2 DATETIME,
      col3 VARCHAR(200)
    ) ENGINE InnoDB COMMENT 'COLUMNAR=1';
    
    -- Hapus IMCI yang valid untuk tabel.
    ALTER TABLE t7 COMMENT 'COLUMNAR=0';

Ubah Definisi IMCI

  • Sintaks:

    • Tambahkan bidang COMMENT 'COLUMNAR=1' ke pernyataan ALTER TABLE ... MODIFY COLUMN ... untuk menambahkan kolom ke IMCI.

    • Tambahkan bidang COMMENT 'COLUMNAR=0' ke pernyataan ALTER TABLE ... MODIFY COLUMN ... untuk menghapus kolom tempat IMCI valid.

    Catatan
    • Untuk PolarDB for MySQL 8.0.1.1.25 dan versi lebih baru, IMCI mendukung tipe data BLOB dan TEXT.

    • Untuk PolarDB for MySQL 8.0.1.1.28 dan versi lebih baru, IMCI mendukung tipe data ENUM.

    • Untuk PolarDB for MySQL 8.0.1.1.29 dan versi lebih baru, Anda dapat membuat IMCI pada tabel terpartisi.

    • Untuk PolarDB for MySQL 8.0.1.1.30 dan versi lebih baru, IMCI mendukung tipe data BIT, JSON, dan Geo.

    • IMCI tidak mendukung tipe data SET.

    • Jika tabel atau kolom sudah memiliki komentar, Anda dapat menambahkan COLUMNAR=1 atau COLUMNAR=0 ke komentar tersebut. Kami sarankan Anda menambahkan COLUMNAR=1 atau COLUMNAR=0 sebelum isi komentar. Sebagai contoh, jika komentar aslinya adalah COMMENT 'abc', komentar akhir setelah Anda menambahkan COLUMNAR=1 adalah COMMENT 'COLUMNAR=1abc'.

  • Contoh:

    CREATE TABLE t8(
      col1 INT COMMENT 'COLUMNAR=1',
      col2 DATETIME COMMENT 'COLUMNAR=1',
      col3 VARCHAR(200)
    ) ENGINE InnoDB;
    
    -- Tambahkan kolom tempat IMCI valid.
    ALTER TABLE t8 MODIFY COLUMN col3 VARCHAR(200) COMMENT 'COLUMNAR=1';
    
    -- Hapus kolom tempat IMCI valid.
    ALTER TABLE t8 MODIFY COLUMN col2 DATETIME COMMENT 'COLUMNAR=0';

Buat IMCI yang Valid untuk Beberapa Kolom

Tabel yang berisi beberapa kolom sering kali terlibat dalam layanan OLAP. Anda dapat menggunakan bidang COMMENT untuk menyederhanakan proses pembuatan IMCI yang valid untuk tabel yang berisi beberapa kolom. Secara default, IMCI valid untuk semua kolom dengan tipe data yang didukung dalam tabel. Anda juga dapat menentukan hanya beberapa kolom tempat IMCI tidak valid.

Catatan
  • Untuk PolarDB for MySQL 8.0.1.1.25 dan versi lebih baru, IMCI mendukung tipe data BLOB dan TEXT.

  • Untuk PolarDB for MySQL 8.0.1.1.28 dan versi lebih baru, IMCI mendukung tipe data ENUM.

  • Untuk PolarDB for MySQL 8.0.1.1.29 dan versi lebih baru, Anda dapat membuat IMCI pada tabel terpartisi.

  • Untuk PolarDB for MySQL 8.0.1.1.30 dan versi lebih baru, IMCI mendukung tipe data BIT, JSON, dan Geo.

  • IMCI tidak mendukung tipe data SET.

  • Jika tabel atau kolom sudah memiliki komentar, Anda dapat menambahkan COLUMNAR=1 ke komentar tersebut. Kami sarankan Anda menambahkan COLUMNAR=1 sebelum isi komentar. Sebagai contoh, jika komentar aslinya adalah COMMENT 'abc', komentar akhir setelah Anda menambahkan COLUMNAR=1 adalah COMMENT 'COLUMNAR=1abc'.

Sebagai contoh, Anda dapat menjalankan pernyataan berikut untuk membuat tabel:

CREATE TABLE t9(
  col1 INT, col2 INT, col3 INT,
  col4 DATETIME, col5 TIMESTAMP,
  col6 CHAR(100), col7 VARCHAR(200),
  col8 TEXT, col9 BLOB
) ENGINE InnoDB;

Anda dapat menjalankan pernyataan berikut untuk membuat IMCI yang valid untuk tabel:

ALTER TABLE t9 COMMENT 'COLUMNAR=1', MODIFY COLUMN col7 VARCHAR(200) COMMENT 'COLUMNAR=0';

Hasil sampel:

SHOW CREATE TABLE t9 FULL\G
*************************** 1. row ***************************
      Table: t9
Create Table: CREATE TABLE `t9` (
  `col1` int(11) DEFAULT NULL,
  `col2` int(11) DEFAULT NULL,
  `col3` int(11) DEFAULT NULL,
  `col4` datetime DEFAULT NULL,
  `col5` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `col6` char(100) DEFAULT NULL,
  `col7` varchar(200) DEFAULT NULL COMMENT 'COLUMNAR=0',
  `col8` text,
  `col9` blob,
  COLUMNAR INDEX  (`col1`,`col2`,`col3`,`col4`,`col5`,`col6`,`col8`,`col9`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT 'COLUMNAR=1'

Pada contoh sebelumnya, IMCI tidak valid untuk kolom col7.

Namun, karena implementasi InnoDB Online DDL, pernyataan ALTER TABLE t9 COMMENT 'COLUMNAR=1', MODIFY COLUMN col7 VARCHAR(200) COMMENT 'COLUMNAR=0'; pada contoh sebelumnya diimplementasikan dalam mode online rebuild. Hal ini mengakibatkan performa yang buruk. Anda dapat mencoba metode berikut:

-- Ubah bidang COMMENT untuk kolom tempat IMCI tidak valid.
ALTER TABLE t9 MODIFY COLUMN col7 VARCHAR(200) COMMENT 'COLUMNAR=0';

-- Ubah bidang COMMENT untuk tabel untuk membuat IMCI yang valid untuk tabel.
ALTER TABLE t9 COMMENT 'COLUMNAR=1';

Buat IMCI Saat Menambahkan Kolom

Saat Anda menjalankan pernyataan ALTER TABLE ADD COLUMN untuk menambahkan kolom, Anda dapat menambahkan bidang COMMENT 'COLUMNAR=1' untuk membuat IMCI yang valid untuk kolom tersebut.

Catatan
  • Untuk PolarDB for MySQL 8.0.1.1.25 dan versi lebih baru, IMCI mendukung tipe data BLOB dan TEXT.

  • Untuk PolarDB for MySQL 8.0.1.1.28 dan versi lebih baru, IMCI mendukung tipe data ENUM.

  • Untuk PolarDB for MySQL 8.0.1.1.29 dan versi lebih baru, Anda dapat membuat IMCI pada tabel terpartisi.

  • Untuk PolarDB for MySQL 8.0.1.1.30 dan versi lebih baru, IMCI mendukung tipe data BIT, JSON, dan Geo.

  • IMCI tidak mendukung tipe data SET.

  • Jika tabel atau kolom sudah memiliki komentar, Anda dapat menambahkan COLUMNAR=1 ke komentar tersebut. Kami sarankan Anda menambahkan COLUMNAR=1 sebelum isi komentar. Sebagai contoh, jika komentar aslinya adalah COMMENT 'abc', komentar akhir setelah Anda menambahkan COLUMNAR=1 adalah COMMENT 'COLUMNAR=1abc'.

Sebagai contoh, Anda dapat menjalankan pernyataan berikut untuk membuat tabel, dan membuat IMCI yang valid untuk kolom col1 dan col2:

CREATE TABLE t10(
  col1 INT COMMENT 'COLUMNAR=1',
  col2 DATETIME COMMENT 'COLUMNAR=1',
  col3 VARCHAR(200)
) ENGINE InnoDB;

Anda dapat menjalankan pernyataan berikut untuk menambahkan kolom col4 tempat IMCI juga valid ke tabel t10:

ALTER TABLE t10 ADD col4 DATETIME DEFAULT NOW() COMMENT 'COLUMNAR=1';

Jalankan Pernyataan INSTANT DDL untuk Membuat dan Menghapus IMCI

  • Untuk PolarDB for MySQL sebelum versi 8.0.1.1.42 dan 8.0.2.2.23

    Pernyataan INSTANT DDL tidak digunakan secara default saat Anda membuat dan menghapus kolom pada tabel tempat IMCI valid. Jika Anda menggunakan pernyataan INSTANT DDL untuk membuat dan menghapus kolom, struktur IMCI harus diubah dan IMCI harus dibangun ulang. Saat IMCI dibangun ulang, IMCI masih dapat digunakan secara normal.

    Jika Anda harus menggunakan pernyataan INSTANT DDL, Anda dapat menggunakan salah satu metode berikut untuk mengaktifkan INSTANT DDL. Performa eksekusi pernyataan DDL pada node penyimpanan baris hanya-baca tidak terpengaruh setelah INSTANT DDL diaktifkan.

    • Jalankan pernyataan berikut di database Anda:

      SET imci_enable_add_column_instant_ddl = ON
    • Masuk ke Konsol PolarDB. Di halaman Parameters, atur parameter loose_imci_enable_add_column_instant_ddl ke ON.

    Setelah INSTANT DDL diaktifkan, IMCI dibuat secara asinkron di latar belakang saat Anda membuat atau menghapus kolom pada node penyimpanan kolom. IMCI yang valid untuk tabel sementara tidak tersedia hingga IMCI selesai dibuat.

  • Untuk PolarDB for MySQL versi 8.0.1.1.42 atau lebih baru dan 8.0.2.2.23 atau lebih baru

    Pernyataan INSTANT DDL digunakan secara default saat Anda membuat dan menghapus kolom pada tabel tempat IMCI valid. Fitur ini tidak kompatibel dengan mode rebuild asli. Anda harus mengatur parameter imci_enable_add_column_instant_ddl ke OFF, dan pastikan bahwa tabel memiliki kunci utama.

Lihat Status IMCI

Setelah fitur IMCI diaktifkan, permintaan kueri OLAP didistribusikan ke node penyimpanan kolom hanya-baca alih-alih node utama. Hal ini mengisolasi sumber daya komputasi OLAP dan OLTP. Karena isolasi ini, pernyataan DDL online untuk membuat atau memodifikasi IMCI dioptimalkan sebagai pernyataan asynchronous DDL. Logika berikut digunakan: Setelah metadata tabel dan IMCI dimodifikasi pada node utama, modifikasi tersebut disinkronkan ke node penyimpanan kolom hanya-baca menggunakan Redo log. Node penyimpanan kolom hanya-baca memulai thread latar belakang untuk membuat IMCI secara bersamaan setelah modifikasi kamus data diterapkan.

Logika asynchronous DDL berarti bahwa IMCI hanya dapat diquery setelah dibuat, meskipun pernyataan DDL telah dikirimkan dan modifikasi kamus data diterapkan. Namun, IMCI tidak dapat diquery sebelum dibuat. Jika Anda melakukan kueri OLAP segera setelah pernyataan DDL dijalankan, node penyimpanan baris hanya-baca masih digunakan. Jika Anda melakukan kueri OLAP setelah IMCI dibuat, node penyimpanan kolom hanya-baca digunakan.

Anda dapat menjalankan pernyataan INFORMATION_SCHEMA.IMCI_INDEXES pada node penyimpanan kolom hanya-baca untuk memeriksa apakah IMCI telah dibuat.

Sebagai contoh, Anda dapat menjalankan pernyataan berikut untuk membuat tabel:

CREATE TABLE t11(
  col1 INT, col2 DATETIME, col3 VARCHAR(200)
) ENGINE InnoDB;

Anda dapat menjalankan pernyataan DDL berikut untuk membuat IMCI:

ALTER TABLE t11 COMMENT 'COLUMNAR=1';

Pernyataan DDL ini mirip dengan efek INSTANT DDL dan dieksekusi dengan cepat pada node utama. Dalam kasus ini, anggaplah Anda segera menjalankan pernyataan berikut untuk melakukan query:

SELECT * FROM INFORMATION_SCHEMA.IMCI_INDEXES WHERE TABLE_NAME = 't11';
Catatan

Jika Anda melakukan query pada tabel terpartisi, Anda dapat menggunakan pencocokan fuzzy. Contoh:

SELECT * FROM INFORMATION_SCHEMA.IMCI_INDEXES WHERE TABLE_NAME LIKE '%t1%';

Jika bidang STATE dalam hasil adalah RECOVERING bukan COMMITTED, IMCI masih dalam proses pembuatan. Untuk informasi lebih lanjut tentang cara melihat kemajuan pembuatan IMCI, lihat Lihat Kecepatan Eksekusi DDL dan Kemajuan Pembuatan untuk IMCI.

+--------+-----------+----------+--------+---------+------+----------+--------+
|TABLE_ID|SCHEMA_NAME|TABLE_NAME|NUM_COLS|PACK_SIZE|ROW_ID|STATE     |MEM_SIZE|
+--------+-----------+----------+--------+---------+------+----------+--------+
|    xxxx| test      | t11      |       3|    65536|     0|RECOVERING|    0   |
+--------+-----------+----------+--------+---------+------+----------+--------+

Jika bidang STATE diatur ke COMMITTED, IMCI telah dibuat. Jika Anda melakukan kueri OLAP sekarang, node penyimpanan kolom hanya-baca digunakan.