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

PolarDB:インメモリー列指向インデックス (IMCI) を作成するための DDL ステートメントの取得

最終更新日:Mar 28, 2026

dbms_imci.columnar_advise() または dbms_imci.columnar_advise_by_columns() を呼び出して、指定されたクエリに対してインメモリー列指向インデックス (IMCI) を作成するのに必要な DDL ステートメントを生成します。いずれのストアドプロシージャも DDL ステートメントのみを返し、実行は行いません。返された DDL ステートメントを実行した後、対象のクエリで使用されるすべての列に有効な IMCI が設定されるまで、無効な列が残っている場合に限り、同じプロシージャを再度実行してください。

前提条件

開始する前に、以下の条件を満たしていることを確認してください。

  • PolarDB for MySQL 8.0.1 クラスター(リビジョンバージョン 8.0.1.1.30 以降)

  • 対象テーブルに対する SELECT 権限

操作手順

IMCI を適用する範囲に応じて、以下のいずれかのプロシージャを選択してください。

プロシージャ適用範囲使用タイミング
dbms_imci.columnar_advise()クエリ対象テーブルのすべての列クエリが参照するすべてのテーブルに対して、完全な列ストアカバー率を確保したい場合
dbms_imci.columnar_advise_by_columns()クエリで実際に参照される列のみクエリで実際に使用される列に限定して、ターゲット型の IMCI を構築したい場合

構文

クエリ対象テーブルのすべての列に対して IMCI を作成するための DDL ステートメントを取得します。

CALL dbms_imci.columnar_advise('<query_string>');

クエリで参照される特定の列のみに対して IMCI を作成するための DDL ステートメントを取得します。

CALL dbms_imci.columnar_advise_by_columns('<query_string>');

パラメーター

パラメーター説明
query_string文字列リテラル解析対象の SQL ステートメントです。SELECT ステートメントである必要があります。INSERTUPDATEDELETE ステートメントはサポートされていません。変数やクエリ結果ではなく、文字列リテラルとして指定する必要があります。クエリ内の SELECT ステートメントが存在しない列を参照する場合、エラーが返されます。

以下の例では、t1 および t2 の 2 つのテーブルを test データベース内に使用します。

サンプルテーブルの準備:

USE test;

CREATE TABLE t1 (a INT, b INT) ENGINE = InnoDB;
CREATE TABLE t2 (a INT, b INT) ENGINE = InnoDB;

クエリ対象テーブルのすべての列に対する DDL の取得

対象クエリを引数として dbms_imci.columnar_advise() を呼び出します。

CALL dbms_imci.columnar_advise('SELECT COUNT(t1.a) FROM t1 INNER JOIN t2 ON t1.a = t2.a GROUP BY t1.b');

実行結果の例:

+-------------------------------------------+
| DDL_STATEMENT                             |
+-------------------------------------------+
| ALTER TABLE test.t1 COMMENT='COLUMNAR=1'; |
| ALTER TABLE test.t2 COMMENT='COLUMNAR=1'; |
+-------------------------------------------+
2 rows in set (0.00 sec)

出力には、各テーブルごとに 1 行の DDL ステートメントが含まれます。各ステートメントは、対象テーブルのすべての列に対して IMCI を有効化します。これらのステートメントを実行して、IMCI を作成してください。

クエリで参照される特定の列に対する DDL の取得

同一のクエリを引数として dbms_imci.columnar_advise_by_columns() を呼び出します。

CALL dbms_imci.columnar_advise_by_columns('SELECT COUNT(t1.a) FROM t1 INNER JOIN t2 ON t1.a = t2.a GROUP BY t1.b');

実行結果の例:

+-------------------------------------------------------------------------------------------------------------------------------------------+
| DDL_STATEMENT                                                                                                                             |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ALTER TABLE test.t1 MODIFY COLUMN a int(11) DEFAULT NULL COMMENT 'COLUMNAR=1', MODIFY COLUMN b int(11) DEFAULT NULL COMMENT 'COLUMNAR=1'; |
| ALTER TABLE test.t2 MODIFY COLUMN a int(11) DEFAULT NULL COMMENT 'COLUMNAR=1';                                                            |
+-------------------------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

このクエリでは t1.at1.bt2.a のみが参照されるため、出力される DDL ステートメントはこれら 3 列に対する IMCI の作成のみを対象としています。これらのステートメントを実行して、クエリで実際に使用される列にのみ IMCI を有効化してください。

すべての列が有効になるまで繰り返す

DDL ステートメントを実行した後、一部の列の IMCI 状態が依然として無効である場合があります。その場合は、同一のクエリで同じストアドプロシージャを再度呼び出し、更新された DDL ステートメントを取得して実行してください。この処理を、ストアドプロシージャが追加のステートメントを返さなくなり、かつクエリで使用されるすべての列に対して IMCI が有効になるまで繰り返します。