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'值運行一次。 –