【发布时间】:2018-12-18 23:45:05
【问题描述】:
我有一个被截断的表,然后每次由一个进程加载数十万条记录。下一个过程需要通过基本上从各种其他表中查找值同时利用一些现有的更新表自己的列作为参考来更新每条记录(没有值)的几个列(在下面的示例中,这可能是 @ 987654321@和TABLE_A.P2),例如:
UPDATE TABLE_A A SET
A.COL1 = (
SELECT B.COL_BX
FROM TABLE_B B
WHERE B.P1 = A.P1 -- Reference back to the updating table's column
),
A.COL2 = (
SELECT D.COL_DY
FROM TABLE_C C INNER JOIN TABLE_D D
ON C.H1 = D.H1
WHERE C.P1 = A.P1 -- Reference back to the updating table's column
-- Would this act as a join between A and C (not implementation-wise but rather functionality)?
),
A.COL3 = (
SELECT G.COL_GZ
FROM TABLE_E E INNER JOIN TABLE_F F
ON E.N1 = F.N1
OUTER JOIN TABLE_G G
ON G.M1 = F.M1
WHERE E.P1 = A.P1
AND E.P2 = A.P2
-- AND (bunch of other predicate for G columns)
); -- There are more columns to be updated but omitted for brevity
当我运行此类更新时,会话超时。我的问题是,鉴于上述情况,是否有更好的方法来编写此更新?
【问题讨论】:
标签: sql oracle oracle11g sql-update query-performance