我一直致力于从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的需要。
(这是一个猜测:你没有给我们你的表和索引的细节,细节是优化查询的一切)