我有一张有900万条记录的表格。要求如下: 1.表插入了900万条记录。每个条目都有一个rowid,使用trigger将其插入表中。 2.我们有两列必须在名为First_Insatance和First_Instance_Date的同一个表中单独更新。 3.这些First Instance列应该保存表中存在的重复记录的第一个Rowid编号。
我们使用以下代码进行更新
UPDATE TABLE_A T4
SET (T4.ROW_ID_FIRST_INS, T4.ROW_ID_DT_FIRST_INS) =
( SELECT MIN (T3.ROW_ID), MIN (T3.UPDATE_DATE)
FROM TABLE_A T3
WHERE T3.SOURCE(+) = T4.SOURCE
AND SUBSTR (T3.TABLE_NAME,
1,
REGEXP_INSTR (T3.TABLE_NAME,
'\_[0-9]{8}T',
1,
1,
0))
|| SUBSTR (T3.TABLE_NAME,
REGEXP_INSTR (T3.TABLE_NAME,
'\_[0-9]{8}T',
1,
1,
1),
LENGTH (T3.TABLE_NAME)
- REGEXP_INSTR (T3.TABLE_NAME,
'\_[0-9]{8}T',
1,
1,
1)) =
SUBSTR (T4.TABLE_NAME,
1,
REGEXP_INSTR (T4.TABLE_NAME,
'\_[0-9]{8}T',
1,
1,
0))
|| SUBSTR (T4.TABLE_NAME,
REGEXP_INSTR (T4.TABLE_NAME,
'\_[0-9]{8}T',
1,
1,
1),
LENGTH (T4.TABLE_NAME)
- REGEXP_INSTR (T4.TABLE_NAME,
'\_[0-9]{8}T',
1,
1,
1))
AND NVL (T4.I_NAM, 'xx') =
NVL (T3.I_NAM, 'xx')
AND NVL (T4.J_NAM, 'xx') = NVL (T3.J_NAM, 'xx')
AND NVL (T4.SYS_NAM, 'xx') =
NVL (T3.SYS_NAM, 'xx')
AND NVL (T4.TG_TAB_NAM, 'xx') =
NVL (T3.TG_TAB_NAM, 'xx')
AND NVL (T4.PK, 'xx') = NVL (T3.PK, 'xx')
AND NVL (T4.ERR, 'xx') =
NVL (T3.ERR, 'xx')
AND NVL (T4.VAL, 'xx') =
NVL (T3.VAL, 'xx')
AND NVL (T4.ID, 'xx') = NVL (T3.ID, 'xx')
GROUP BY T4.FIELD,
T4.ERR,
T4.VAL,
T4.ID,
T4.PK,
T4.I_NAM,
T4.SYS_NAM,
T4.J_NAM)
WHERE T4.CURRENT_LOAD_ID = some number FROM CURSOR;
对于3050条记录,查询需要35秒,但运行4L记录时。它不会在过去的2天内停止运行。
Row_ID是PK并且已经按列创建了NU索引,除了少数大小为4000的列。
感谢。
答案 0 :(得分:0)
您似乎使用过于复杂的方法来确定使用别名的重复项。 我尝试按照这些方式整合更简单的东西。 选择ID 从 表格1 通过...分组 id有计数(id)> 1
如果没有您的表格结构,一些示例数据以及问题的完整解释,则很难做得更多。