我要求与一个表进行比较,如果有不匹配的情况,则更新另一个表。表LEGACY_CUST_INFO具有正确的CUST_PRIVILEGE_NUMBER。因此,我需要在第二个表CUST_INFO中找出错误的CUST_PRIVILEGE_NUMBER,并使用第一个表LEGACY_CUST_INFO中正确的CUST_PRIVILEGE_NUMBER进行更新。两个表中的ROW_ID匹配是完全匹配。这两个表都有大约2000万条记录。
下面是两个表结构
表1名称:LEGACY_CUST_INFO
ROW_ID CUST_PRIVILEGE_NUMBER
表2名称:客户信息
ROW_ID CUST_PRIVILEGE_NUMBER
当我检查下面的语句时,我遇到了性能问题。有没有更好的方法来创建一个包含不匹配记录的表并更新CUST_INFO表中的列CUST_PRIVILEGE_NUMBER?下面是我的代码和逻辑。
1.我正在创建一个表- EXACT_RECORDS,其中包含精确匹配记录。
1.从LEGACY_CUST_INFO表中删除完全匹配的记录。
1.根据LEGACY_CUST_INFO表更新CUST_PRIVILEGE_NUMBER。
CREATE TABLE EXACT_RECORDS
AS
(SELECT A.* FROM LEGACY_CUST_INFO A, CUST_INFO B WHERE A.ROW_ID = B.ROW_ID AND A.CUST_PRIVILEGE_NUMBER = B.CUST_PRIVILEGE_NUMBER);
DELETE FROM LEGACY_CUST_INFO WHERE ROW_ID IN (SELECT ROW_ID FROM EXACT_RECORDS);
UPDATE CUST_INFO B SET B.CUST_PRIVILEGE_NUMBER = (SELECT A.CUST_PRIVILEGE_NUMBER FROM LEGACY_CUST_INFO A WHERE A.ROW_ID = B.ROW_ID);
我知道这个逻辑很基本。你能以更好的方式提供帮助,以便在不到30分钟的时间内更新2000万条记录吗?
2条答案
按热度按时间mo49yndu1#
我建议使用一个包含查询的merge语句,返回准备好的不匹配记录进行更新。
还可以考虑为表创建索引:
UPD。您可以通过运行嵌套的select而不将其内容合并到目标表中来估计时间:
UPD2.要考虑
ci.cust_privilege_number
中的NULL,只需在查询中添加替代条件:cdmah0mi2#
索引有助于更快地检索数据。检查以下查询:-
对于row_ID
对于单个update语句,使用两个表之间的联接来更新不匹配的CUST_PRIVILEGE_NUMBER。检查以下查询:-