用語集のすべての用語

インデックススキャン

PostgreSQL のインデックススキャンとは?

インデックススキャンは、インデックスを使って条件に合う行を見つけ、それらをテーブルから取得します。EXPLAIN では Index Scan と表示され、Index Only Scan ではテーブルの読み取りを省略できます。

インデックススキャンでは、PostgreSQL がインデックスをたどってクエリの条件に合うエントリを見つけ、対応する行をテーブルから読み取ります。主キーによる検索のように、クエリがテーブルの行のごく一部を選択する場合に効率的です。

関連するアクセス方法も EXPLAIN に現れます。Bitmap Index Scan は、まず条件に合うすべての行の位置を集め、その後テーブルのページを物理的な順序で読み取るため、中程度の件数の結果に適しています。Index Only Scan は、必要な列がすべてインデックスに含まれている場合にインデックスだけでクエリに答え、可視性マップで all-visible とマークされたページについてはテーブルの読み取りを省略します。

例

この例では、主キー付きのテーブル(PostgreSQL は主キーを B-tree インデックスで実装します)を作成し、id による検索を EXPLAIN で確認します。出力には Index Scan using orders_pkey と表示されます。

CREATE TABLE orders (id int PRIMARY KEY, customer_id int, total numeric);
INSERT INTO orders
SELECT g, g % 1000, g * 1.5 FROM generate_series(1, 100000) AS g;
ANALYZE orders;

EXPLAIN SELECT * FROM orders WHERE id = 42;

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

出典

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

関連用語