全部产品
Search
文档中心

PolarDB:Sintaksis DDL IMCI Tingkat Tabel

更新时间:Jul 09, 2025

Topik ini menjelaskan cara membuat dan menghapus Indeks Kolom dalam Memori tingkat tabel (IMCI).

Persyaratan Versi

Kluster Anda harus memenuhi persyaratan versi berikut:

  • PolarDB for MySQL 8.0.1 dengan versi revisi 8.0.1.1.45 atau yang lebih baru.

  • PolarDB for MySQL 8.0.2 dengan versi revisi 8.0.2.2.27 atau yang lebih baru.

Perintah sederhana untuk satu tabel

Buat IMCI Tingkat Tabel

Anda dapat mengeksekusi pernyataan CREATE COLUMNAR INDEX ON untuk membuat IMCI tingkat tabel. Sintaks:

CREATE COLUMNAR INDEX ON <db_name>.<table_name>;
CREATE COLUMNAR INDEX ON <table_name>;

Sintaks untuk membuat IMCI tingkat tabel mirip dengan sintaks untuk membuat indeks sekunder non-IMCI, kecuali Anda tidak perlu menentukan nama untuk IMCI tingkat tabel atau kolom yang termasuk dalam IMCI. Parameter db_name menentukan database dalam sesi saat ini.

Catatan
  • Anda tidak dapat mengonfigurasi IMCI kustom. Untuk informasi tentang cara mengaktifkan penyesuaian IMCI, lihat Gunakan atribut ekstensi IMCI untuk menyesuaikan IMCI.

  • Jika tidak ada IMCI tingkat tabel pada tabel yang ditentukan dalam pernyataan DDL, IMCI langsung dibuat di tabel setelah Anda mengeksekusi pernyataan tersebut. Untuk mencegah kesalahan ketika Anda mengeksekusi pernyataan pada tabel yang sudah memiliki IMCI tingkat tabel, Anda dapat menambahkan klausa IF NOT EXISTS sebelum kata kunci ON.

  • Secara default, pernyataan CREATE COLUMNAR INDEX ON setara dengan pernyataan ALTER TABLE berikut:

    ALTER TABLE <db_name>.<table_name> COMMENT 'COLUMNAR=1 <OLD_COMMENT>';
  • Pernyataan di atas hanya berlaku setelah Anda mengatur parameter allow_implicit_imci_alter_comment menjadi OFF.

Hapus IMCI Tingkat Tabel

Berikut adalah sintaks untuk DROP COLUMNAR INDEX ON:

DROP COLUMNAR INDEX ON <db_name>.<table_name>;
DROP COLUMNAR INDEX ON <table_name>;

Sintaks untuk menghapus IMCI tingkat tabel mirip dengan sintaks untuk menghapus indeks sekunder non-IMCI, kecuali Anda tidak perlu menentukan nama IMCI tingkat tabel. Parameter <db_name> menentukan database dalam sesi saat ini.

Catatan
  • Jika IMCI tingkat tabel ada di tabel yang ditentukan dalam pernyataan, IMCI langsung dihapus dari tabel setelah Anda mengeksekusi pernyataan tersebut. Untuk mencegah kesalahan ketika Anda mengeksekusi pernyataan pada tabel yang IMCI tingkat tabelnya sudah dihapus, Anda dapat menambahkan klausa IF EXISTS sebelum kata kunci ON.

  • Pernyataan DROP COLUMNAR INDEX ON setara dengan kombinasi dua pernyataan ALTER TABLE berikut:

    ALTER TABLE <db_name>.<table_name> COMMENT 'COLUMNAR=0 <OLD_COMMENT>';
    ALTER TABLE <db_name>.<table_name> COMMENT '<OLD_COMMENT>';

Buat IMCI Tingkat Tabel Secara Batch

Berikut adalah sintaks untuk CREATE COLUMNAR FOR TABLES IN:

CREATE COLUMNAR INDEX FOR TABLES IN <db_name>;

Berikut adalah sintaks untuk CREATE COLUMNAR FOR TABLES FROM:

CREATE COLUMNAR INDEX FOR TABLES FROM <db_name>;

Berikut adalah sintaks untuk CALL:

-- dbms_imci: nama paket database yang digunakan untuk mengelola operasi terkait IMCI.
-- add_columnar_index: nama prosedur tersimpan yang ingin Anda panggil. Anda dapat menggunakan prosedur tersimpan ini untuk membuat IMCI untuk database tertentu.
CALL dbms_imci.add_columnar_index('<db_name>');

Parameter set_implicit dari prosedur tersimpan bersifat opsional. Jika Anda mengatur parameter set_implicit ke 1, sistem menambahkan penanda implicit_imci ke database. Kemudian, ketika Anda membuat tabel baru di database, sistem secara otomatis membuat IMCI di tabel tersebut.

Catatan
  • Untuk semua tabel yang ada di database yang ditentukan <db_name>, IMCI tingkat tabel dibuat jika belum ada.

  • Anda tidak dapat mengonfigurasi IMCI kustom. Untuk informasi tentang cara mengaktifkan penyesuaian IMCI, lihat Gunakan atribut ekstensi IMCI untuk menyesuaikan IMCI.

  • Sintaks untuk membuat IMCI tingkat tabel mirip dengan sintaks untuk membuat indeks sekunder non-IMCI, kecuali Anda tidak perlu menentukan nama untuk IMCI tingkat tabel atau kolom yang termasuk dalam IMCI.

Contoh:

mysql> SHOW tables IN tpch;
+--------------------+
| Tables_in_tpch |
+--------------------+
| customer           |
| lineitem           |
| nation             |
| orders             |
| part               |
| partsupp           |
| region             |
| revenue0           |
| supplier           |
+--------------------+
9 rows in set (0.01 sec)

mysql> SHOW imci indexes;
Empty set (0.02 sec)

mysql> CREATE COLUMNAR INDEX FOR TABLES IN tpch;
+------------+--------+
| Table_Name | Result |
+------------+--------+
| customer   | Ok     |
| lineitem   | Ok     |
| nation     | Ok     |
| orders     | Ok     |
| part       | Ok     |
| partsupp   | Ok     |
| region     | Ok     |
| supplier   | Ok     |
+------------+--------+
8 rows in set (0.56 sec)

-- Jika nilai field STATE adalah COMMITTED, IMCI telah dibuat. Jika tidak, IMCI masih dalam proses pembuatan.
mysql> SHOW imci indexes;
+----------+-------------+------------+----------+-----------+-----------+---------+------------------+---------------------+-----------------------------+--------------+
| TABLE_ID | SCHEMA_NAME | TABLE_NAME | NUM_COLS | NUM_PACKS | PACK_SIZE | ROW_ID  | STATE            | STATE_UPDATE_AT     | CHECKPOINT_DATADIR          | WRITE_POLICY |
+----------+-------------+------------+----------+-----------+-----------+---------+------------------+---------------------+-----------------------------+--------------+
| 1080     | tpch        | region     | 3        | 0         | 65536     | 0       | RECOVERING       | 2024-09-24 18:50:16 | ./imci_1/imci_chkp_1080_258 | Tradeoff     |
| 1081     | tpch        | nation     | 4        | 1         | 65536     | 65536   | COMMITTED        | 2024-09-24 18:50:16 | ./imci_1/imci_chkp_1081_254 | Tradeoff     |
| 1082     | tpch        | part       | 9        | 64        | 65536     | 4194304 | RECOVER_BUILDING | 2024-09-24 18:50:16 | ./imci_1/imci_chkp_1082_256 | Tradeoff     |
| 1083     | tpch        | supplier   | 7        | 0         | 65536     | 0       | RECOVERING       | 2024-09-24 18:50:16 | ./imci_1/imci_chkp_1083_259 | Tradeoff     |
| 1084     | tpch        | partsupp   | 5        | 0         | 65536     | 0       | RECOVERING       | 2024-09-24 18:50:16 | ./imci_1/imci_chkp_1084_257 | Tradeoff     |
| 1085     | tpch        | customer   | 8        | 64        | 65536     | 4194304 | RECOVER_BUILDING | 2024-09-24 18:50:15 | ./imci_1/imci_chkp_1085_252 | Tradeoff     |
| 1086     | tpch        | orders     | 9        | 0         | 65536     | 0       | RECOVER_BUILDING | 2024-09-24 18:50:16 | ./imci_1/imci_chkp_1086_255 | Tradeoff     |
| 1087     | tpch        | lineitem   | 15       | 0         | 65536     | 0       | RECOVER_BUILDING | 2024-09-24 18:50:15 | ./imci_1/imci_chkp_1087_253 | Tradeoff     |
+----------+-------------+------------+----------+-----------+-----------+---------+------------------+---------------------+-----------------------------+--------------+
8 rows in set, 1 warning (0.07 sec)

Hapus Indeks Kolom dalam Memori secara massal

Berikut adalah sintaks untuk DROP COLUMNAR INDEX FOR TABLES IN:

DROP COLUMNAR INDEX FOR TABLES IN <db_name>;

Berikut adalah sintaks untuk DROP COLUMNAR INDEX FOR TABLES FROM:

DROP COLUMNAR INDEX FOR TABLES FROM <db_name>;

Berikut adalah sintaks untuk CALL:

-- dbms_imci: nama paket database yang digunakan untuk mengelola operasi terkait IMCI.
-- drop_columnar_index: nama prosedur tersimpan yang ingin Anda panggil. Anda dapat menggunakan prosedur tersimpan ini untuk menghapus IMCI tingkat tabel di database yang ditentukan.
CALL dbms_imci.drop_columnar_index('<db_name>');

Parameter reset_implicit dari prosedur tersimpan bersifat opsional. Jika Anda mengatur parameter reset_implicit ke 1, sistem menghapus penanda implicit_imci dari database. Dalam hal ini, IMCI tingkat tabel tidak akan dibuat secara otomatis di tabel baru yang dibuat di database.

Catatan

Semua IMCI tingkat tabel yang ada dihapus dari semua tabel di database yang ditentukan <db_name>.

mysql> SHOW imci indexes;
+----------+-------------+------------+----------+-----------+-----------+-----------+-----------+---------------------+-----------------------------+--------------+
| TABLE_ID | SCHEMA_NAME | TABLE_NAME | NUM_COLS | NUM_PACKS | PACK_SIZE | ROW_ID    | STATE     | STATE_UPDATE_AT     | CHECKPOINT_DATADIR          | WRITE_POLICY |
+----------+-------------+------------+----------+-----------+-----------+-----------+-----------+---------------------+-----------------------------+--------------+
| 1080     | tpch        | region     | 3        | 1         | 65536     | 65536     | COMMITTED | 2024-09-24 18:50:30 | ./imci_1/imci_chkp_1080_258 | Tradeoff     |
| 1081     | tpch        | nation     | 4        | 1         | 65536     | 65536     | COMMITTED | 2024-09-24 18:50:16 | ./imci_1/imci_chkp_1081_254 | Tradeoff     |
| 1082     | tpch        | part       | 9        | 306       | 65536     | 20054016  | COMMITTED | 2024-09-24 18:50:30 | ./imci_1/imci_chkp_1082_256 | Tradeoff     |
| 1083     | tpch        | supplier   | 7        | 16        | 65536     | 1048576   | COMMITTED | 2024-09-24 18:50:34 | ./imci_1/imci_chkp_1083_259 | Tradeoff     |
| 1084     | tpch        | partsupp   | 5        | 1221      | 65536     | 80019456  | COMMITTED | 2024-09-24 18:51:15 | ./imci_1/imci_chkp_1084_257 | Tradeoff     |
| 1085     | tpch        | customer   | 8        | 229       | 65536     | 15007744  | COMMITTED | 2024-09-24 18:50:28 | ./imci_1/imci_chkp_1085_252 | Tradeoff     |
| 1086     | tpch        | orders     | 9        | 2289      | 65536     | 150011904 | COMMITTED | 2024-09-24 18:51:23 | ./imci_1/imci_chkp_1086_255 | Tradeoff     |
| 1087     | tpch        | lineitem   | 15       | 9156      | 65536     | 600047616 | COMMITTED | 2024-09-24 18:54:16 | ./imci_1/imci_chkp_1087_253 | Tradeoff     |
+----------+-------------+------------+----------+-----------+-----------+-----------+-----------+---------------------+-----------------------------+--------------+
8 rows in set, 1 warning (1.09 sec)

mysql> CALL dbms_imci.drop_columnar_index('tpch');
+-------------+------------+--------+
| Object_Name | Operation  | Result |
+-------------+------------+--------+
| customer    | drop_index | Ok     |
| lineitem    | drop_index | Ok     |
| nation      | drop_index | Ok     |
| orders      | drop_index | Ok     |
| part        | drop_index | Ok     |
| partsupp    | drop_index | Ok     |
| region      | drop_index | Ok     |
| supplier    | drop_index | Ok     |
+-------------+------------+--------+
8 rows in set (0.33 sec)

mysql> SHOW imci indexes;
Empty set (0.27 sec)

Hasil operasi massal

Hasil dari operasi pembuatan dan penghapusan massal IMCI tingkat tabel di atas ditampilkan dalam format tabel. Kolom Hasil menunjukkan hasil operasi untuk setiap tabel. Tabel berikut menjelaskan kemungkinan kode hasil:

Kode hasil

Deskripsi

Ok

Operasi selesai. Misalnya, IMCI tingkat tabel telah dibuat atau dihapus.

Skip by unsupported

Operasi tidak didukung.

Skip by no change

Objek target sudah ada atau statusnya sudah sesuai. Misalnya, sistem melewati operasi pembuatan jika IMCI tingkat tabel sudah ada.

Skip by concurrent operation

Ada konflik operasi konkuren. Misalnya, sistem tidak dapat memperoleh kunci metadata (MDL) karena operasi DDL lain pada tabel.

Skip by not found

Objek target tidak ada.

Skip by ACL deny

Akun saat ini tidak memiliki izin yang diperlukan.

Failed

Operasi gagal.

Tambahkan IMCI tingkat tabel tanpa mengubah komentar tabel

Tabel ini menjelaskan parameter yang digunakan untuk mengonfigurasi fitur IMCI implisit.

Parameter

Level

Deskripsi

allow_implicit_imci_alter_comment

Sesi

Menentukan apakah komentar tingkat tabel dapat dimodifikasi. Nilai valid:

  • ON (nilai default): Mengizinkan Anda memodifikasi komentar.

  • OFF: Membuat indeks penyimpanan kolom tanpa memodifikasi komentar.

Catatan

Jika Anda mengatur parameter allow_implicit_imci_alter_comment ke OFF, Anda dapat membuat IMCI tingkat tabel di tabel tanpa menggunakan komentar. Konfigurasi ini cocok untuk skenario berikut:

  • Anda mengeksekusi pernyataan CREATE TABLE ketika parameter loose_polar_enable_implicit_imci_with_create_table diatur ke ON.

  • Anda mengeksekusi pernyataan CREATE COLUMNAR INDEX ON <db>.<table> untuk membuat IMCI tingkat tabel secara dinamis.

  • Indeks penyimpanan kolom dibuat selama operasi penambahan massal.

Contoh 1:

SET allow_implicit_imci_alter_comment = OFF;
-- Buat tabel dan buat IMCI di tabel.
SET GLOBAL polar_enable_implicit_imci_with_create_table = ON;
CREATE TABLE t1 (id INT PRIMARY KEY, name VARCHAR(100));

SHOW CREATE TABLE t1 FULL;
/*
Table Create Table t1	
CREATE TABLE `t1` (
  `id` int(11) NOT NULL,
  `name` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`),
  COLUMNAR INDEX (`id`,`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
*/

Contoh 2:

CREATE TABLE t1 (id INT PRIMARY KEY, name VARCHAR(100));

SET allow_implicit_imci_alter_comment = OFF;
-- CREATE COLUMNAR INDEX ON table;
CREATE COLUMNAR INDEX ON test.t1;

SHOW CREATE TABLE t1 FULL;
/*
Table Create Table t1	
CREATE TABLE `t1` (
  `id` int(11) NOT NULL,
  `name` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`),
  COLUMNAR INDEX (`id`,`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
*/

Contoh 3:

*/
CREATE TABLE t1 (id INT PRIMARY KEY, name VARCHAR(100));
CREATE TABLE t2 (id INT PRIMARY KEY, code DOUBLE);

SET allow_implicit_imci_alter_comment = OFF;

-- CREATE COLUMNAR INDEX FOR TABLES IN db;
CREATE COLUMNAR INDEX FOR TABLES IN test;
/*
Table_Name	Result
t1	Ok
t2	Ok
*/

SHOW CREATE TABLE t1 FULL;
/*
Table Create Table t1	
CREATE TABLE `t1` (
  `id` int(11) NOT NULL,
  `name` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`),
  COLUMNAR INDEX (`id`,`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
*/

SHOW CREATE TABLE t2 FULL;
/*
Table Create Table t2	
CREATE TABLE `t2` (
  `id` int(11) NOT NULL,
  `code` double DEFAULT NULL,
  PRIMARY KEY (`id`),
  COLUMNAR INDEX (`id`,`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
*/

Keuntungan

Anda tidak perlu memodifikasi komentar tabel pengguna. Misalnya, dalam skenario bisnis SaaS, konfigurasi ini memastikan bahwa informasi tabel pengguna tenant besar (IMCI tingkat tabel dibuat) konsisten dengan informasi tabel pengguna tenant kecil (tidak ada IMCI tingkat tabel yang dibuat). Ini memfasilitasi proses validasi yang dilakukan menggunakan alat ekologi.

Kerugian

  • Dalam skenario di mana Anda melakukan sinkronisasi data primer/sekunder menggunakan log biner, Anda tidak dapat membuat IMCI di database sekunder karena komentar terkait IMCI hilang. Untuk membuat IMCI di database sekunder, pastikan pengaturan parameter terkait database sekunder sama dengan pengaturan parameter database primer.

  • Anda tidak dapat mengonfigurasi IMCI kustom. Untuk informasi tentang cara mengaktifkan penyesuaian IMCI, lihat Gunakan atribut ekstensi IMCI untuk menyesuaikan IMCI.