用語集のすべての用語

B-tree インデックス

PostgreSQL の B-tree インデックスとは?

B-tree は PostgreSQL のデフォルトのインデックス型です。ソート可能なデータに対する等値比較と範囲比較を扱い、ソート済みの状態で行を返すことができます。

B-tree インデックスは、キーを平衡木の中でソートされた状態に保ちます。CREATE INDEX は、別の型を指定しない限り B-tree を作成し、PostgreSQL は主キーと一意制約にも B-tree を使います。

オプティマイザは、<、<=、=、>=、> による比較、BETWEEN と IN、IS NULL と IS NOT NULL に B-tree を利用できます。また、インデックスの順序で行を返せるため、ORDER BY のための別途ソートを省けることがあります。どのインデックスも一部の読み取りを高速化する一方で、すべての書き込みに処理を追加するため、クエリで実際に絞り込みや並べ替えに使う列にインデックスを作成してください。

例

この例では、タイムスタンプ列にインデックスを作成し、直近 1 時間の行について EXPLAIN で確認します。出力には Index Scan using logs_created_at_idx と表示されます。

CREATE TABLE logs (
  id bigint GENERATED ALWAYS AS IDENTITY,
  created_at timestamptz NOT NULL
);
INSERT INTO logs (created_at)
SELECT now() - g * interval '1 minute' FROM generate_series(1, 100000) AS g;
CREATE INDEX logs_created_at_idx ON logs (created_at);
ANALYZE logs;

EXPLAIN SELECT * FROM logs WHERE created_at > now() - interval '1 hour';

拡張機能なしの標準の PostgreSQL 16 または 17 で動くプレーンな SQL です。破棄してかまわない空のデータベースで実行してください。

出典

PostgreSQL 公式ドキュメント(英語)。

関連用語