Postgresql 执行一个 sql 请求的时间比 Oracle 长 10 倍。我们如何使用 Postgresql 加速该查询?
以下请求:
select t1.c1, t1.c2 from MyTable t1
where t1.c3='string'
and t1.c2=(select max(t2.c2) from MyTable t2 where t2.c4=t1.c4);
完整查询:
select t1.c1, t1.c2 from MyTable t1
left outer join Table t3
on t1.c1=t3.c1
where t1.c3='string'
and t1.c2=(select max(t2.c2) from MyTable t2 where t2.c4=t1.c4);
在 Postgres 中,这种类型的查询在使用时效率更高
distinct on ()
或者使用标准 SQL 和窗口函数:
如果您不能更改查询,因为这是由混淆层(又名“ORM”)生成的,那么将列添加
c3
到索引idx_multi_c2_c4
并创建索引(c1,c3)
可能会有所帮助。