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

PolarDB:列指向インデックスの概要

最終更新日:Aug 13, 2026

このトピックでは、複雑なクエリの処理を向上させる PolarDB for PostgreSQL のインメモリ列指向インデックス (IMCI) 機能について説明します。

はじめに

PolarDB for PostgreSQL の IMCI 機能により、単一のシステムで高同時実行のオンライン トランザクション処理 (OLTP) と、複雑なデータ分析 (OLAP) の両方を処理できます。分析クエリのために、アーキテクチャが複雑で高価な外部システムを別途維持する必要がなくなります。これにより、データアーキテクチャが簡素化され、運用保守 (O&M) コストが削減され、大量のビジネスデータのリアルタイム分析が可能になります。

行指向ストレージエンジンと比較して、IMCI 機能は、ストレージレイヤーの IMCI と、ベクトル化実行エンジンとしても知られる実行エンジンレイヤーのベクトル化演算子という 2 つの主要な領域でクエリパフォーマンスを向上させます。これらの改善は、複雑なクエリを処理する際の行指向ストレージエンジンの制限を効果的に克服します。100 GB のデータセットと 32 コア、256 GB のクラスターを使用した TPC-H パフォーマンステストでは、PolarDB for PostgreSQL の列指向エンジンは、行指向ストレージエンジンよりも 60 倍以上高いクエリパフォーマンスを実現します。詳細については、「IMCI パフォーマンステスト結果」をご参照ください。

仕組み

アーキテクチャの最適化

PolarDB for PostgreSQL は、IMCI 機能の実行エンジンとストレージレイヤーの両方を最適化して、複雑なクエリをより適切に処理します。

  • 実行エンジンレイヤー

    • 行指向ストレージエンジンとは異なり、ベクトル化実行エンジンは CPU SIMD 命令を使用してデータをバッチで処理します。単一の CPU 命令で複数行のデータを並列処理できます。これにより、関数呼び出しにかかる時間が短縮され、キャッシュミスの問題を回避します。

    • ベクトル化エンジンは、クエリ演算子の完全なベクトル化を実現します。たとえば、ScanGroup ByOrder ByHash JoinFilterCountSum などの演算子をベクトル化します。これにより、エンジンはバッチデータ入力を受け入れ、SIMD 命令を使用して処理できます。

  • ストレージレイヤー

    • ヒープ行指向ストレージ構造よりもベクトル化演算子に適した、列指向ストレージ形式を使用します。

    • 列指向ストレージ形式は、インデックス (IMCI) を使用して実装しています。IMCI は B ツリー インデックスや GiST インデックスに似ていますが、ストレージ構造と適用可能なシナリオが異なります。IMCI は直接使用できます。B ツリー インデックスと GiST インデックスは、行指向ストレージエンジンが使用します。テーブルには、さまざまなクエリを処理するために、IMCI と他の種類のインデックスの両方を含めることができます。PolarDB for PostgreSQL のクエリオプティマイザは、クエリコストに基づいて最適なインデックスを選択します。

次の図に示すように、ポイントクエリ (SELECT * FROM t WHERE c2=10) のためにテーブル t の列 c2 に B ツリー インデックスを作成し、統計クエリ (SELECT c4, SUM(c5) FROM t GROUP BY c4) のために列 c4 と c5 に IMCI を作成できます。クエリオプティマイザは、SQL 文のコストに基づいて最も効率的なインデックスを決定します。

image

リアルタイムな行列表現の同期

IMCI のデータは、データベース内に列形式で格納します。データはまず行指向テーブルに書き込まれ、次にインデックス作成メカニズムを使用して IMCI に同期します。このプロセスは、行列表現の同期と呼ばれます。PolarDB for PostgreSQL の IMCI 機能は、効率的でリアルタイムかつ自動化された行列表現の同期メカニズムを提供し、追加のパイプラインや列指向データの手動更新の必要性を排除します。

行列表現の同期メカニズムは、先行書き込みログ (WAL) を解析して変更されたデータを取得し、それを非同期で IMCI に書き込みます。このプロセスが行指向ストレージエンジンのパフォーマンスと負荷に与える影響は最小限で、3% 未満です。PolarDB for PostgreSQL の IMCI 機能は、同じノード上の行指向ストレージエンジンと共存できるため、WAL ログの解析プロセスを最適化しています。行列表現の変換プロセスは非同期ですが、書き込み負荷に応じて数ミリ秒から数秒のレイテンシーでリアルタイム同期を実現できます。行列表現の同期を最適化する方法の詳細については、「IMCI のリアルタイムパフォーマンスの向上」をご参照ください。

製品形態

IMCI 機能は、PolarDB for PostgreSQL クラスターにデプロイされたすべてのノードに適用されます。したがって、クラスター内のすべてのコンピューティングノードには、行指向ストレージエンジンと IMCI の両方があります。このモードでは、システムは SQL 文を実行するときに次の決定を行います。

  1. 実行するコンピューティングノードを選択します。

  2. ノード上の実行エンジンを選択します。

コンピューティングノードの選択

システムが複数のノードを含む PolarDB クラスターで IMCI に関連する SQL 文を実行する場合、コンピューティングノードを選択する必要があります。

  • データ定義言語 (DDL) やデータ操作言語 (DML) 文など、すべてのデータ変更文は読み書きノードで実行されます。その後、読み書きノードは特定の条件に基づいて適切な実行エンジンを選択します。

  • 読み書きノードは IMCI を作成し、リアルタイム同期を実行します。

  • すべての読み取り専用 SQL 文については、データベースプロキシを設定して、実行ノードを決定できます。

実行エンジンの選択

コンピューティングノードは、SQL 文を実行する実行エンジンを選択します。

  • CREATE TABLEALTER TABLE などの DDL 文には、行指向ストレージエンジンを使用します。ただし、CREATE TABLE AS SELECT 文の場合、システムは SELECT サブクエリの複雑さに基づいて IMCI を使用するかどうかを決定します。

  • INSERTUPDATEDELETE などの DML 文には、システムは行指向ストレージエンジンを使用します。

  • SELECT などのデータクエリ言語 (DQL) 文の場合、システムはクエリコストと特定のパラメーターに基づいて IMCI を使用するかどうかを決定します。通常、クエリコストが高いほど、IMCI を使用する可能性が高くなります。IMCI が SELECT 文の実行に失敗した場合、システムは行指向ストレージエンジンを使用してステートメントを再実行します。

image

主な機能と利点

  • 高パフォーマンス

    行指向ストレージエンジンと比較して、IMCI は SQL クエリのパフォーマンスを大幅に向上させます。行指向ストレージエンジンよりも 100 倍以上、複雑なクエリの実行を高速化できます。

  • 優れたコスト効率

    • クエリを最適化するために、テーブル全体ではなく、関連する列に対して IMCI を作成できます。

    • IMCI は、行指向インデックスよりも少ないストレージ領域しか占有しません。特定の列のデータ型に応じて、IMCI は行指向インデックスが占有するストレージ領域の 10%~50% しか占有しません。

  • 使いやすさ

    ベクトル化エンジンはネイティブの PostgreSQL と完全な互換性があり、同様に使用できます。

    • IMCI はネイティブの PostgreSQL インデックスのように管理でき、CREATE INDEXDROP INDEX などのステートメントをサポートします。追加のステートメントは必要ありません。詳細については、「IMCI の有効化と使用」をご参照ください。

    • IMCI は PostgreSQL のデータ型と構文との高い互換性があります。既存の SQL 文を変更することなく、高速化のために IMCI を使用できます。

    • すべての SQL 文、セッション内の SQL 文、またはヒント付きの特定の SQL 文など、どの SQL 文が IMCI を使用できるかをきめ細かく指定するパラメーターを設定できます。詳細については、「IMCI の有効化と使用」をご参照ください。

  • IMCI のリアルタイムメンテナンス

    • 行指向データと IMCI 間のデータ一貫性は自動的に維持されます。これにより、行指向データと列指向データ間の変換や手動同期を設定する必要がなくなります。

    • 行指向テーブルに挿入されたデータは、数ミリ秒から数秒のレイテンシーで IMCI に同期されます。ビジネス負荷に基づいてデータ同期パフォーマンスを調整できます。詳細については、「IMCI の有効化と使用」をご参照ください。

  • 一貫性

    さまざまなビジネスニーズを満たすために、IMCI と行指向データに対して次の一貫性レベルを提供しています。

    • 結果整合性 (デフォルト):このレベルは、書き込み負荷は重いが、リアルタイムパフォーマンス要件が低いクエリに適しています。

    • 強い整合性:このレベルは、IMCI データが行指向データと一致した後にクエリ結果を返します。詳細については、「IMCI の有効化と使用」をご参照ください。

  • さまざまな利用方法との互換性

    • Prepared Statement 構文をサポートします。

    • トランザクションブロック内の SELECT 文の高速化をサポートします。

      説明

      SELECT 文は、トランザクションブロック内で書き込み前に読み取りを行う SQL 文である必要があります。

    • パーティションテーブルと、pg_pathman によって管理されるパーティションテーブルをサポートします。パーティションプルーニングもサポートされています。詳細については、「パーティションテーブルでの IMCI の使用」をご参照ください。

    • 時空間マルチモーダルクエリの高速化をサポートします。

一般的なユースケース

PolarDB for PostgreSQL の IMCI 機能は、さまざまなビジネスシナリオに適した、ワンストップのハイブリッドトランザクション/分析処理 (HTAP) エクスペリエンスを提供します。

  • HTAP シナリオ:たとえば、毎日大量のトランザクション CRUD 操作を実行しながら、過去 1 時間のリアルタイムレポートを生成する必要があります。PolarDB for PostgreSQL の IMCI 機能は、両方のワークロードを効率的に処理するだけでなく、システムアーキテクチャを簡素化します。分析クエリのリアルタイム OLAP 部分のために別のシステムを維持する必要がなくなります。

  • 低速クエリの高速化:従来、行指向エンジンでは低速だったクエリを高速化するのに最適です。例:

    • 全テーブル集計 (COUNTSUMAVG)。

    • 複雑な GROUP BY および ORDER BY 操作。

    • 複数テーブルの JOIN 操作。

    • 複合インデックスでは柔軟性に欠ける、動的なフィルター条件を持つクエリ。

  • マルチモーダルおよび地理空間クエリ:ネストされた JSON データを効率的にクエリしたり、地理空間データに対して統計分析を実行したりします。

  • ETL の高速化:IMCI の強力な計算能力を活用して、複雑なデータ変換と ETL プロセスをデータベース内で直接実行します。

課金

IMCI は、行指向ノードで直接実行することも、追加した IMCI 読み取り専用ノードで実行することもできます。

  • 既存のノードで IMCI を使用する場合:無料です。

  • IMCI 専用の読み取り専用ノードを追加する場合:追加のコンピューティングリソースには標準のコンピューティングノード料金が適用されます。さらに、IMCI は追加のストレージ領域を消費するため、標準のストレージ料金が発生します。

説明

ワークロードの分離

ワークロードを完全に分離するには、IMCI 専用の読み取り専用ノードを追加できます。これにより、分析処理 (AP) クエリがトランザクション処理 (TP) ワークロードのパフォーマンスに影響を与えないようにします。詳細については、「ビジネスへの影響」をご参照ください。