すべてのプロダクト
Search
ドキュメントセンター

PolarDB:データベースレベルおよびテーブルレベル IMCI の DDL 構文

最終更新日:Mar 28, 2026

このページでは、PolarDB for MySQL クラスターでテーブルレベルのインメモリ列指向インデックス (IMCI) を作成および削除するための DDL 文について説明します。

バージョン要件

ご利用のクラスターは、次のいずれかのバージョンを実行している必要があります:

  • PolarDB for MySQL 8.0.1、リビジョンバージョン 8.0.1.1.45 以降

  • PolarDB for MySQL 8.0.2、リビジョンバージョン 8.0.2.2.27 以降

単一テーブルのコマンド

テーブルレベル IMCI の作成

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

db_name」を省略すると、この文は現在のセッションのデータベースを対象とします。セカンダリインデックスとは異なり、インデックス名や含める列を指定する必要はありません。IMCI はすべての列を自動的にカバーします。

テーブルに既に IMCI が存在する場合にエラーを回避するには、IF NOT EXISTSON の前に追加します。

CREATE COLUMNAR INDEX IF NOT EXISTS ON <db_name>.<table_name>;

デフォルトでは、この文は以下と同等です:

ALTER TABLE <db_name>.<table_name> COMMENT 'COLUMNAR=1 <OLD_COMMENT>';
上記の等価性は、allow_implicit_imci_alter_commentON(デフォルト)に設定されている場合にのみ適用されます。OFF に設定すると、テーブルのコメントを変更せずに IMCI が作成されます。詳細については、「テーブルのコメントを変更せずにテーブルレベル IMCI を作成する」をご参照ください。
すべての列を対象とする代わりにカスタム IMCI を設定するには、「IMCI の拡張属性を使用して IMCI をカスタマイズする」をご参照ください。

IMCI 作成ステータスの確認

IMCI を作成した後、次のコマンドを実行して準備が完了したかどうかを確認します:

SHOW IMCI INDEXES;

STATE フィールドは、現在のステータスを示します:

状態説明
COMMITTEDIMCI は準備が完了しており、クエリで利用可能です。
RECOVERING既存のデータから IMCI を構築中です。
RECOVER_BUILDINGリカバリーイベントの後、IMCI を再構築中です。

テーブルレベル IMCI の削除

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

db_name が省略された場合、この文は現在の会話のデータベースを対象とします。インデックス名を指定する必要はありません。

IMCI が既に削除されている場合のエラーを回避するには、IF EXISTSON の前に追加します。

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

この文は、以下の両方を実行することと同等です:

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

バッチ操作

以下の文を使用して、データベース内のすべてのテーブルにまたがる IMCI を一度に作成または削除します。

テーブルレベル IMCI の一括作成

3つの同等の構文オプションがサポートされています:

-- オプション 1
CREATE COLUMNAR INDEX FOR TABLES IN <db_name>;

-- オプション 2
CREATE COLUMNAR INDEX FOR TABLES FROM <db_name>;

-- オプション 3: ストアドプロシージャ (dbms_imci パッケージ)
-- dbms_imci: IMCI 操作を管理するためのデータベースパッケージ
-- add_columnar_index: 指定されたデータベース内のすべてのテーブルに IMCI を作成します
CALL dbms_imci.add_columnar_index('<db_name>');

3 つのオプションすべては、<db_name> 内でまだテーブルレベル IMCI を持っていないすべてのテーブルに対して、テーブルレベル IMCI を作成します。

ストアドプロシージャは、オプションの set_implicit パラメーターを受け入れます。1 に設定すると、データベースに implicit_imci マーカーが追加され、そのデータベースで作成された新しいテーブルに自動的に IMCI が付与されます。

CALL dbms_imci.add_columnar_index('<db_name>', 1);

次の例では、tpch データベース内のすべてのテーブルに対して IMCI を作成し、結果を確認します:

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)

-- STATE フィールドを確認します。COMMITTED は IMCI が準備完了であることを意味します。
-- RECOVERING と RECOVER_BUILDING は、まだ構築中であることを意味します。
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)

テーブルレベル IMCI の一括削除

3つの同等の構文オプションがサポートされています:

-- オプション 1
DROP COLUMNAR INDEX FOR TABLES IN <db_name>;

-- オプション 2
DROP COLUMNAR INDEX FOR TABLES FROM <db_name>;

-- オプション 3: ストアドプロシージャ (dbms_imci パッケージ)
-- dbms_imci: IMCI 操作を管理するためのデータベースパッケージ
-- drop_columnar_index: 指定されたデータベース内のすべてのテーブルから IMCI を削除します
CALL dbms_imci.drop_columnar_index('<db_name>');

3 つのオプションすべてが、<db_name> 内のすべてのテーブルから既存のテーブルレベル IMCI を削除します。

このストアドプロシージャは、オプションの reset_implicit パラメーターを受け付けます。1 に設定すると、データベースから implicit_imci マーカーが削除され、新しいテーブルが自動的に IMCI を受信することを防止します:

CALL dbms_imci.drop_columnar_index('<db_name>', 1);

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)

バッチ操作の結果コード

バッチ操作の出力において、Result 列は各テーブルの結果を示します。

結果コード説明
Ok操作は正常に完了しました。
Skip by unsupportedこのテーブルでは操作がサポートされていません。
Skip by no changeターゲットがすでに存在するか、ステータスがすでに一致しています。たとえば、作成時に IMCI がすでに存在する場合や、削除時に IMCI が存在しない場合などです。
Skip by concurrent operation同時操作の競合により操作が妨げられました。たとえば、別の DDL 文がテーブルにメタデータロック (MDL) を保持している場合などです。
Skip by not foundターゲットオブジェクトが存在しません。
Skip by ACL deny現在のアカウントには必要な権限がありません。
Failed操作は失敗しました。

テーブルコメントを変更せずにテーブルレベル IMCI を作成

デフォルトでは、CREATE COLUMNAR INDEX ON コマンドは、テーブルのコメントを更新することで IMCI をマークします(コメント内の COLUMNAR=1 と同等です)。テーブルのコメントを変更せずに IMCI を作成するには、セッションパラメーター allow_implicit_imci_alter_commentOFF に設定します。

パラメーターレベルデフォルト説明
allow_implicit_imci_alter_commentセッションONIMCI が作成される際に、テーブルコメントが変更されるかどうかを制御します。OFF に設定すると、テーブルコメントを更新せずに列指向インデックスを作成できます。

OFF」に設定すると、このパラメーターはすべての3つの作成パスに適用されます:

  • loose_polar_enable_implicit_imci_with_create_tableON にセットされている場合の CREATE TABLE

  • CREATE COLUMNAR INDEX ON <db>.<table> 動的作成用

  • CREATE COLUMNAR INDEX FOR TABLES IN <db_name> による一括作成

例 1: テーブルを作成し、テーブルコメントを変更せずに自動的に IMCI を追加します。

SET allow_implicit_imci_alter_comment = OFF;
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;
/*
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
*/

例 2: 既存のテーブルに、テーブルコメントを変更せずに動的に IMCI を追加します。

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

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

SHOW CREATE TABLE t1 FULL;
/*
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
*/

例 3: 複数のテーブルにまたがって、テーブルコメントを変更せずに IMCI を一括作成します。

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 test;
/*
Table_Name  Result
t1          Ok
t2          Ok
*/

SHOW CREATE TABLE t1 FULL;
/*
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;
/*
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
*/

この設定を使用する状況

`allow_implicit_imci_alter_comment = OFF` を使用する場合:

テーブルコメントは、テナント間またはインスタンス間で一貫性を保つ必要があります。たとえば、SaaS 環境では、インメモリー列指向インデックス (IMCI) を持つ large テナントのテーブルと、それを持たない small テナントのテーブルとで、SHOW CREATE TABLE の出力が同一になります。これにより、エコシステムツールによる検証が簡素化されます。

以下の制限事項にご注意ください:

  • バイナリログレプリケーション:バイナリログを介したレプリケーションでは、IMCI 関連のコメントが binlog に含まれていないため、セカンダリデータベースで IMCI を再作成できません。セカンダリデータベース上で IMCI を作成するには、プライマリデータベースおよびセカンダリデータベースの両方で、同じ allow_implicit_imci_alter_comment および関連するパラメータ設定を構成します。

  • カスタム IMCI: カスタム IMCI は、これらの DDL ステートメントでは設定できません。IMCI をカスタマイズするには、「IMCI の拡張属性を使用して列指向インデックスをカスタマイズする」をご参照ください。