通过检查其他 table 记录来保持 table 最新的有效方法

Efficient way to keep a table up to date by checking other tables records

试图找出最有效的方法编写查询以保持table最新。

例如我有 3 个 table,我们称它们为 TableATableBTableC

TableA 是需要使用唯一代码保持最新状态的代码。所有 3 个 table 都有一个名为 Code.

查询必须查看 TableBTableC 以找到 TableA 中不存在的唯一代码并将它们插入 TableA.

请注意,TableBTableC table 都有 ~55k 条记录,并且 TableA ~1k。 tables 中的记录数很少变化。一年总共最多 1k 条记录。

第一个选项我想出了以下但不喜欢执行计划:

INSERT INTO TableA (Code)
SELECT DISTINCT Code FROM TableB WHERE Code NOT IN(SELECT Code FROM TableA)
UNION
SELECT DISTINCT Code FROM TableC WHERE Code NOT IN(SELECT Code FROM TableA)

还查看了显示 LEFT OUTER JOIN 选项的 link。但是无法想出加入 3 tables 来获取 TableA 中缺少但存在于 TableB Or TableC.[=31 中的代码=]

这是一个选项,UNION ALL 两个表,然后用 NOT EXISTS 和相关子查询过滤掉。

INSERT INTO TableA (code)
SELECT DISTINCT code 
FROM (SELECT code FROM TableB UNION ALL SELECT code FROM TableC) t
WHERE NOT EXISTS (SELECT 1 FROM TableA ta WHERE ta.code = t.code)

您确实需要 TableA(code) 上的索引来加速子查询。

我想知道使用 UNION 先进行重复数据删除是否会提供更好的性能:

INSERT INTO TableA (Code)
SELECT Code 
FROM (SELECT code FROM TableB UNION SELECT code FROM TableC) t
WHERE NOT EXISTS (SELECT 1 FROM TableA ta WHERE ta.code = t.code)