PostgreSQL でも 9.2 から インデックス・オンリー・スキャンが使えるようになっています。
この機能は データを取得する際に、インデックスだけで事足りる場合は インデックスのみを使用するというものです。 Oracle では昔からありましたが PostgreSQL では 9.2 から実装されました。
通常は、検索にインデックスを使用しても、テーブルからデータを取得するために 別の領域(ヒープ)を読みに行くわけですが、これが不要になるためパフォーマンスの向上に かなり期待できる部分があります。
ただ、PostgreSQLは追記型のデータベースなので インデックスだけでは 古いデータかどうか判断できないため、インデックス・オンリー・スキャンの実装は 難しいとされていました。 これを 8.4 でバキュームのため?に追加された ビジビリティマップ というデータを使って「インデックスだけで大丈夫か」を判断しているそうです。
なので、インデックス・オンリー・スキャンといっても、場合によってはテーブルのデータを読みに行く必要があります。 更新が多いテーブルでは難しいかもしれません。
三焦経だけでもありがたいですし、ビジビリティマップが綺麗に?なるようにバキュームも重要です。
実行計画を見ると次のようになります。
( field1 がテーブルの主キー)
psql=# EXPLAIN psql-# SELECT field1 FROM table1 psql-# WHERE field1 > 300000 Index Only Scan using table1_pkey on table1 (cost=0.43.. Index Cond: (field1 > 300000)
Index Only Scan と出力されます。