0
MERGE INTO ////////1 GFO
USING
(SELECT *
FROM
(SELECT facto/////rid,
p-Id,
PRE/////EDATE,
RU//MODE,
cre///date,
ROW_NUMBER() OVER (PARTITION BY facto/////id ORDER BY cre///te DESC) col
FROM ///////////2
) x
WHERE x.col = 1) UFD
ON (GFO.FACTO-/////RID=UFD.FACTO////RID)
WHEN MATCHED THEN UPDATE
SET
GFO.PRE////DATE=UFD.PRE//////DATE
WHERE UFD.CRE/////DATE IS NOT NULL
AND UFD.RU//MODE= 'S'
AND GFO.P////ID=:2
喜every1,我上面的MERGE语句花费的时间太长,它必须使用表2分别具有4millions在表1中运行40次加记录,为40个不同的p - id,请建议更有效的方式,目前它需要40+分钟。 其更新使用一列从table2.t只有一个colummn我怎样才能使这个合并/更新语句更加高效,其花费过多时间
我无法执行查询,其返回 错误:无法获取最后从PLAN_TABLE解释计划 EXPLAIN PLAN IMAGE
这里是解释计划截图
您能否为此查询显示解释计划?只需运行'EXPLAIN PLAN FOR MERGE ..........',然后'SELECT * FROM table(DBMS_XPLAN.Display)',然后复制此查询的结果(作为文本)并将其追加到题。 – krokodilko
是否有'GFO.P //// ID','GFO.FACTO - ///// RID'和'UFD.FACTO //// RID'的选择性索引?如果是这样,请将GFO加入到您的'SELECT'语句中并在其中应用'GFO.P //// ID =:2'过滤器。 –
目前还不清楚为什么这需要运行40次,而不是在'on'中有一个额外的条件为所有的40'p - id'值运行一次。 –