假设我有一个带有int
列的表,而我要从中读取的只是 MAX() int 值。
如果我在该列上创建索引,Postgres 可以对该索引执行反向扫描以获取MAX()
值。但是由于索引中除一行之外的所有内容都只是开销,我们能否在无需创建完整索引的情况下获得相同的性能。
是的,可以创建一个触发器来更新一个跟踪 MAX 值的单行表,并查询该表,而不是MAX()
针对主表发出一个。但我正在寻找一些优雅的东西,因为我知道 Postgres 有部分索引,我似乎无法找到一种方法来为此目的利用它们。
更新:这个部分索引定义理想地是我想要的,但是 Postgres 不允许在部分索引的 WHERE 子句中使用子查询。
create index on test(a) where a = (select max(a) from test);