【发布时间】:2021-07-10 06:55:02
【问题描述】:
我正在将数据库从 oracle 迁移到 postgresql,但我遇到了更新查询的性能问题。
explain update airepp.EQP_CALC_STAT_EVENEMENT e set EVT_COM_POPULATION=(
SELECT f.COM_RECENSEMENT_DER_POPULATION
FROM airepp.EQP_FOURNISSEUR f where e.EVT_LIEU_LOC_CODE = f.COM_CODE)
;
在 oracle 中这个查询大约需要 5 分钟,在 postgresql 中需要 55 分钟,它们具有相同的索引和确切的字段,这是 postgresql 和 oracle 的解释这个查询
甲骨文计划:
我试过这个,但在 66 分钟后更糟
explain update airepp.EQP_CALC_STAT_EVENEMENT e
set EVT_COM_POPULATION = f.COM_RECENSEMENT_DER_POPULATION
FROM airepp.EQP_FOURNISSEUR f
where e.EVT_LIEU_LOC_CODE = f.COM_CODE;
有没有其他方法可以以更优化的方式编写此查询以获得与 oracle 或 near 相同的结果?
【问题讨论】:
-
参考表的基数是多少? 3700 万次索引扫描在任何数据库中都不是很好。
-
怎么看?
-
你确定你的两个数据库有相同的数据吗? (您没有一台 40M 行和一台 10M 行?) 并且您拥有相同的硬件和配置? (您的一个上没有旋转磁盘,另一个上没有 SSD,或者分区不同,或者不同驱动器上的日志文件,CPU 或内存的差异等等等等) 您可能需要让您的 DBA 提供每个服务器的完整资源描述。
-
它们是完全相同的数据库,具有相同的资源
-
@astentx 实际上 postgresql 表包含 36 m 而在 oracle 中是 10 m 但是这可以解释 postgresql 中 55 分钟的执行时间以及 oracle 中的 5 分钟吗?
标签: sql postgresql join sql-update