列を持つテーブルがあり、int
そこから読み取るのは MAX() int 値だけだとします。
その列にインデックスを作成すると、Postgres はそのインデックスのリバース スキャンを実行してMAX()
値を取得できます。しかし、インデックス内の 1 つの行を除いてすべてが単なるオーバーヘッドであるため、完全なインデックスを作成しなくても同じパフォーマンスを得ることができます。
はい、MAX 値を追跡する単一行テーブルを更新するトリガーを作成しMAX()
、メイン テーブルに対して を発行する代わりに、そのテーブルにクエリを実行できます。しかし、Postgres には部分的なインデックスがあることを知っているので、エレガントなものを探しています。この目的のためにそれらを活用する方法が見つからないようです。
更新: この部分インデックスの定義は理想的なものですが、Postgres では部分インデックスの WHERE 句でサブクエリを使用できません。
create index on test(a) where a = (select max(a) from test);