【发布时间】:2018-11-29 15:18:30
【问题描述】:
我有一个语句经常使用安静,但性能很差。 所以我想尽可能地优化它。该语句由各个部分和联合组成。
一个相当昂贵的部分如下。
select *
from rc050 F
LEFT OUTER JOIN
(SELECT fi_nr,
fklz,
rvc_status,
lfdnr,
txt
FROM rc0531 temp
WHERE lfdnr =
(SELECT MAX(lfdnr) FROM rc0531 WHERE fi_nr = temp.fi_nr AND fklz = temp.fklz
)
) SUB_TABLE1
ON F.fklz = SUB_TABLE1.fklz
AND F.fi_nr = SUB_TABLE1.fi_nr
LEFT OUTER JOIN
(SELECT fi_nr,
fklz,
rvc_status,
lfdnr,
txt
FROM rc0532 temp
WHERE lfdnr =
(SELECT MAX(lfdnr) FROM rc0532 WHERE fi_nr = temp.fi_nr AND fklz = temp.fklz
)
) SUB_TABLE2
ON F.fklz = SUB_TABLE2.fklz
AND F.fi_nr = SUB_TABLE2.fi_nr
LEFT OUTER JOIN
(SELECT fi_nr,
fklz,
rvc_status,
lfdnr,
txt
FROM rc05311 temp
WHERE lfdnr =
(SELECT MAX(lfdnr)
FROM rc05311
WHERE fi_nr = temp.fi_nr
AND fklz = temp.fklz
)
) SUB_TABLE11
ON F.fklz = SUB_TABLE11.fklz
AND F.fi_nr = SUB_TABLE11.fi_nr
where F.fklz != ' '
这是我必须从这些 rc0531 ... rc05311 表中加载的部分 最新条目是什么。这些表中有 11 个,因此将其分解。 如您所见,我目前正在通过子查询加入每个表,并且只需要最新条目,因此我需要一个额外的子查询来获取 max(lfdnr)。
到目前为止,这一切都很好,但我想知道是否有更有效的方法来执行此操作。
在我的主选择中,我需要能够处理每个表中的每一列。
大家有什么建议吗?
目前在 13k 行上运行需要 1.3 秒才能获得不错的提升,这应该会降低到 0.1 秒左右。同样,这只是一个充满低效声明的更大声明中的一个问题。
【问题讨论】:
标签: oracle join optimization subquery max