查询在Oracle上运行很快,但在Postgres上运行很慢



我一直致力于从Oracle到Postgres的过程转换,并遇到了性能问题。因此,在Oracle上运行这个查询需要15秒,在Postgres上运行它需要35分钟。

select count(*)
from DATA_BUFFER a
LEFT OUTER JOIN NETWORK_LINES n 
ON n.ROUTE_NAME = trim(substr(a.SIGNED_HIGHWAY_ID, 0, 7));

Oracle和Postgres中的表有相同数量的记录,这个查询返回相同的值

您的postgresDATA_BUFFER表可以从on子句中使用的表达式索引中受益。

试试这个:

CREATE INDEX trimmed_highway_id ON 
DATA_BUFFER (trim(substr(a.SIGNED_HIGHWAY_ID, 0, 7)));

这可以消除运行一堆字符串处理操作来满足LEFT JOIN的需要。

(这是一个猜测:你没有给我们你的表和索引的细节,细节是优化查询的一切)

最新更新