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

PolarDB:クラスタ化カラムナーインデックスの再構築

最終更新日:Aug 13, 2025

このトピックでは、オンライン操作に影響を与えることなく、クラスタ化カラムナーインデックス (CCI) の定義を変更するために再構築する方法について説明します。

前提条件

  • カラムナーインデックスが作成されている。

  • 再構築プロセスはオンラインで実行され、ロックを取得しません。 カラムナーインデックスまたは基になる行ベースのテーブルの既存のワークロードに干渉することはありません。

重要な注意事項

インスタンスはバージョン 5.4.20-20250714 以降で実行されている必要があります。

説明

CCI を再構築する場合

CCI の再構築は、パフォーマンスを最適化したり、ビジネスの変化に適応したりするために設計を調整する必要がある場合に必要です。 よくあるシナリオは次のとおりです。

  • クエリのパフォーマンスを最適化するため:初期テスト中に、インデックスのパフォーマンスが期待どおりでない場合があります。 データアクセス パターンにより一致する別のソートキーまたはパーティションキーを使用して CCI を再構築すると、クエリ速度が大幅に向上する可能性があります。

  • スキーマまたはビジネスロジックの変更に適応するため:ビジネスの進化に伴い、テーブルの列を追加、削除、または変更する必要がある場合があります。 関連する SQL クエリも変更される場合、既存の CCI が最適ではなくなる可能性があります。 インデックスを再構築することで、新しいスキーマとクエリの要件に確実に一致させることができます。

  • データの増加と分散に適応するため:データ量が増加するにつれて、元のパーティション分割戦略が非効率になる可能性があります。 大規模なデータセットをより適切に管理するために、インデックスを再構築してパーティションキーを変更したり、パーティション数を調整したり、時間ベースの列でデータベースまたはテーブルをパーティション分割したりする必要がある場合があります。

  • 新しい機能とアップグレードをサポートするため:データベースが CCI 機能に重要な更新を導入する場合、新しい機能を活用し、互換性を確保するために既存のインデックスを再構築する必要がある場合があります。

構文

  1. MAX_CCI_COUNT 変数を設定する

    再構築プロセスでは、レガシーの CCI を削除する前に、一時的に新しい CCI が作成されます。 これを許可するには、まず、テーブルごとに許可される CCI の最大数を 2 以上に増やす必要があります。

    SET GLOBAL MAX_CCI_COUNT = 2;
    説明

    ターゲットテーブルに既に複数の CCI が含まれている場合は、この値を既存のインデックスの総数よりも大きく設定します。

  2. インデックスを再構築する

    同期操作または非同期操作を使用してインデックスを再構築できます。

    同期再構築

    ALTER TABLE REBUILD 構文を使用して同期再構築を実行します。 この操作は、再構築が完了するまでセッションをブロックします。 詳細については、「CCI を作成して使用する」をご参照ください。

    ALTER TABLE tbl_name REBUILD ClUSTERED COLUMNAR INDEX index_name [CCI DEFINITION]; 
    説明
    • 指定されたテーブル (tbl_name) と CCI (index_name) が存在する必要があります。 存在しない場合は、エラーが返されます。

    • アーカイブされた CCI は再構築できません。

    非同期再構築 (大規模なテーブルに推奨)

    再構築プロセスに時間がかかる可能性のある大規模なテーブルの場合、操作を非同期で実行することをお勧めします。

    ALTER TABLE tbl_name REBUILD ClUSTERED COLUMNAR INDEX index_name [CCI DEFINITION] ASYNC=TRUE;

この例では、既存の CCI のソートキーとパーティション数を変更する方法を示します。

  1. 初期 CCI を使用してテーブルを作成します。

    ソートキーとパーティションキーはどちらも id に設定されています。

    CREATE TABLE `t_order` (
        `id` bigint(11) NOT NULL AUTO_INCREMENT,
        `order_id` varchar(20) DEFAULT NULL,
        `buyer_id` varchar(20) DEFAULT NULL,
        `seller_id` varchar(20) DEFAULT NULL,
        `order_snapshot` longtext,
        CLUSTERED COLUMNAR INDEX `cci_test` (`id`) PARTITION BY KEY(`id`) PARTITIONS 4,
        PRIMARY KEY (`id`)
    ) ENGINE = InnoDB DEFAULT CHARSET = utf8 AUTO_INCREMENT = 2
    PARTITION BY KEY(`id`)
    PARTITIONS 16;
  2. 新しい定義で CCI を再構築します。

    ソートキーは seller_id に変更され、パーティション数は 16 に変更されます。

    ALTER TABLE `t_order` 
    REBUILD CLUSTERED COLUMNAR INDEX `cci_test`(`seller_id`) PARTITION BY KEY(`id`) PARTITIONS 16;
  3. 新しいテーブルスキーマを確認します。

    SHOW CREATE TABLE t_order\G

    出力は、CCI 定義が正常に更新されたことを示しています。

    *************************** 1. row ***************************
           Table: t_order
    Create Table: CREATE TABLE `t_order` (
    	`id` bigint(11) NOT NULL AUTO_INCREMENT,
    	`order_id` varchar(20) DEFAULT NULL,
    	`buyer_id` varchar(20) DEFAULT NULL,
    	`seller_id` varchar(20) DEFAULT NULL,
    	`order_snapshot` longtext,
    	PRIMARY KEY (`id`),
    	CLUSTERED COLUMNAR INDEX `cci_test` (`seller_id`)
    		PARTITION BY KEY(`id`)
    		PARTITIONS 16
    ) ENGINE = InnoDB DEFAULT CHARSET = utf8
    PARTITION BY KEY(`id`)
    PARTITIONS 16