【发布时间】:2014-04-28 14:59:37
【问题描述】:
请给我推荐更好的代码
方法(A)
MERGE /*+ Idx_Mrx_Strategy */INTO stgMurex m
USING
(
SELECT m.RowId AS mRowId
FROM stgMurex m
INNER JOIN LovDF_EMIR t
ON m.Strategy = t.Strategy
WHERE t.NonDF = 'Y'
) l
ON (m.RowId = l.mRowId)
WHEN MATCHED THEN
UPDATE SET
m.DF = 'N'
WHERE m.DF IS NULL
;
行计划
199448 合并声明
合并 STGMUREX
看法
199448 哈希连接
199448 哈希连接
130 表访问完全 LOVDF_EMIR
576864 表访问完全 STGMUREX
1426340 表访问全 STGMUREX
方法(B)
MERGE INTO stgMurex m
USING
(
SELECT t.Strategy
FROM LovDF_EMIR t
WHERE t.NonDF = 'Y'
) l
ON (m.Strategy = l.Strategy)
WHEN MATCHED THEN
UPDATE SET
m.DF = 'N'
WHERE m.DF IS NULL
;
行计划
199448 合并声明
合并 STGMUREX
看法
199448 哈希连接
130 表访问完全 LOVDF_EMIR
576864 表访问完全 STGMUREX
我可以说方法 B 最好吗?
【问题讨论】:
-
为什么只在更新时才使用合并而不是更新?
-
@Franek 我怀疑这是因为 Oracle 在更新语句中不支持
JOIN,而这个问题很容易通过JOIN解决。
标签: sql performance oracle join