このトピックでは、テーブルレベルのインメモリ列インデックス(IMCI)を作成および削除する方法について説明します。
バージョン要件
クラスタは、次のバージョン要件を満たしている必要があります。
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 文を実行して、テーブルレベルの IMCI を作成できます。構文:
CREATE COLUMNAR INDEX ON <db_name>.<table_name>;CREATE COLUMNAR INDEX ON <table_name>;テーブルレベルの IMCI を作成するための構文は、IMCI 以外のセカンダリインデックスを作成するための構文に似ています。ただし、テーブルレベルの IMCI の名前、または IMCI に含まれる列を指定する必要はありません。db_name パラメーターは、現在のセッションのデータベースを指定します。
カスタム IMCI を構成することはできません。IMCI カスタマイズを有効にする方法については、「IMCI の拡張属性を使用して IMCI をカスタマイズする」をご参照ください。
DDL 文で指定されたテーブルにテーブルレベルの IMCI が存在しない場合、文を実行すると、テーブルに IMCI が直接作成されます。テーブルレベルの IMCI が存在するテーブルで文を実行したときにエラーが発生しないようにするには、
IF NOT EXISTS句をONキーワードの前に追加できます。デフォルトでは、CREATE COLUMNAR INDEX ON 文は、次の ALTER TABLE 文と同じです。
ALTER TABLE <db_name>.<table_name> COMMENT 'COLUMNAR=1 <OLD_COMMENT>';上記の文は、allow_implicit_imci_alter_comment パラメーターを OFF に設定した後でのみ有効になります。
テーブルレベルの IMCI を削除する
DROP COLUMNAR INDEX ON 構文:
DROP COLUMNAR INDEX ON <db_name>.<table_name>;DROP COLUMNAR INDEX ON <table_name>;テーブルレベルの IMCI を削除するための構文は、IMCI 以外のセカンダリインデックスを削除するための構文に似ています。ただし、テーブルレベルの IMCI の名前を指定する必要はありません。<db_name> パラメーターは、現在のセッションのデータベースを指定します。
文で指定されたテーブルにテーブルレベルの IMCI が存在する場合、文を実行すると、テーブルから IMCI が直接削除されます。テーブルレベルの IMCI がすでに削除されているテーブルで文を実行したときにエラーが発生しないようにするには、
IF EXISTS句をONキーワードの前に追加できます。DROP COLUMNAR INDEX ON 文は、次の 2 つの ALTER TABLE 文の組み合わせと同じです。
ALTER TABLE <db_name>.<table_name> COMMENT 'COLUMNAR=0 <OLD_COMMENT>'; ALTER TABLE <db_name>.<table_name> COMMENT '<OLD_COMMENT>';
テーブルレベルの IMCI をバッチ作成する
CREATE COLUMNAR FOR TABLES IN 構文:
CREATE COLUMNAR INDEX FOR TABLES IN <db_name>;CREATE COLUMNAR FOR TABLES FROM 構文:
CREATE COLUMNAR INDEX FOR TABLES FROM <db_name>;CALL 構文:
-- dbms_imci: IMCI 関連の操作を管理するために使用されるデータベースパッケージの名前。
-- add_columnar_index: 呼び出すストアドプロシージャの名前。ストアドプロシージャを使用して、特定のデータベースの IMCI を作成できます。
CALL dbms_imci.add_columnar_index('<db_name>');ストアドプロシージャの set_implicit パラメーターはオプションです。 set_implicit パラメーターを 1 に設定すると、システムはデータベースに implicit_imci マーカーを追加します。その後、データベースに新しいテーブルを作成すると、システムはテーブルに IMCI を自動的に作成します。
指定されたデータベース
<db_name>内のすべての既存のテーブルについて、テーブルレベルの IMCI がまだ存在しない場合は作成されます。カスタム IMCI を構成することはできません。IMCI カスタマイズを有効にする方法については、「IMCI の拡張属性を使用して IMCI をカスタマイズする」をご参照ください。
テーブルレベルの IMCI を作成するための構文は、IMCI 以外のセカンダリインデックスを作成するための構文に似ています。ただし、テーブルレベルの IMCI の名前、または 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 は作成されます。そうでない場合、IMCI はまだ作成中です。
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)インメモリ列インデックスをバッチ削除する
DROP COLUMNAR INDEX FOR TABLES IN 構文:
DROP COLUMNAR INDEX FOR TABLES IN <db_name>;DROP COLUMNAR INDEX FOR TABLES FROM 構文:
DROP COLUMNAR INDEX FOR TABLES FROM <db_name>;CALL 構文:
-- dbms_imci: IMCI 関連の操作を管理するために使用されるデータベースパッケージの名前。
-- drop_columnar_index: 呼び出すストアドプロシージャの名前。ストアドプロシージャを使用して、指定されたデータベース内のテーブルレベルの IMCI を削除できます。
CALL dbms_imci.drop_columnar_index('<db_name>');ストアドプロシージャの reset_implicit パラメーターはオプションです。 reset_implicit パラメーターを 1 に設定すると、システムはデータベースから implicit_imci マーカーを削除します。この場合、データベースに作成された新しいテーブルには、テーブルレベルの IMCI は自動的に作成されません。
指定されたデータベース <db_name> 内のすべてのテーブルから、既存のすべてのテーブルレベル IMCI が削除されます。
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)バッチ操作の結果
上記のテーブルレベル IMCI のバッチ作成および削除操作の結果は、表形式で表示されます。[結果] 列は、各テーブルの操作の結果を示しています。次の表に、考えられる結果コードを示します。
結果コード | 説明 |
Ok | 操作は完了です。たとえば、テーブルレベルの IMCI が作成または削除されます。 |
Skip by unsupported | 操作はサポートされていません。 |
Skip by no change | ターゲットオブジェクトはすでに存在するか、ステータスはすでに一致しています。たとえば、テーブルレベルの IMCI がすでに存在する場合、システムは作成操作をスキップします。 |
Skip by concurrent operation | 同時操作の競合が存在します。たとえば、テーブルに対する他の DDL 操作が原因で、システムはメタデータロック(MDL)を取得できません。 |
Skip by not found | ターゲットオブジェクトは存在しません。 |
Skip by ACL deny | 現在のアカウントには必要な権限がありません。 |
Failed | 操作に失敗しました。 |
テーブルコメントを変更せずにテーブルレベルの IMCI を追加する
この表は、暗黙的な IMCI 機能を構成するために使用されるパラメーターについて説明しています。
パラメーター | レベル | 説明 |
allow_implicit_imci_alter_comment | セッション | テーブルレベルのコメントを変更できるかどうかを指定します。有効な値:
|
allow_implicit_imci_alter_comment パラメーターを OFF に設定すると、コメントを使用せずにテーブルにテーブルレベルの IMCI を作成できます。この構成は、次のシナリオに適しています。
loose_polar_enable_implicit_imci_with_create_table パラメーターが ON に設定されているときに、
CREATE TABLE文を実行します。CREATE COLUMNAR INDEX ON <db>.<table> 文を実行して、テーブルレベルの IMCI を動的に作成します。
バッチ追加操作中に列ストアインデックスが作成されます。
例 1:
SET allow_implicit_imci_alter_comment = OFF;
-- テーブルを作成し、テーブルに IMCI を作成します。
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
*/例 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
*/例 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
*/利点
ユーザテーブルのコメントを変更する必要はありません。たとえば、SaaS ビジネスシナリオでは、この構成により、大規模テナント(テーブルレベルの IMCI が作成される)のユーザテーブル情報と小規模テナント(テーブルレベルの IMCI が作成されない)のユーザテーブル情報の一貫性が確保されます。これにより、エコツールを使用して実行される検証プロセスが容易になります。
欠点
バイナリログを使用してプライマリ/セカンダリデータの同期を実行するシナリオでは、IMCI 関連のコメントがないため、セカンダリデータベースに IMCI を作成できません。セカンダリデータベースに IMCI を作成するには、セカンダリデータベースの関連パラメーター設定がプライマリデータベースのパラメーター設定と同じであることを確認してください。
カスタム IMCI を構成することはできません。IMCI カスタマイズを有効にする方法については、「IMCI の拡張属性を使用して IMCI をカスタマイズする」をご参照ください。