我正在处理两个每个包含120,000,000条记录的SQL表。两张表中很少有记录(约60,000)重复。两个表的结构是相同的。
每张表中有40列。我需要将记录合并到一个表中。
我知道有两种方法可以做到(两者都给我想要的输出)。我想知道哪种方式更好,请问有更好的方法吗?
方法1:
SELECT * INTO Table1_copy FROM Table1
DROP TABLE Table1
SELECT * INTO Table1 FROM Table1_copy
UNION
SELECT * FROM Table2
DROP TABLE Table1_copy
方法2:
INSERT INTO Table1 <br>
SELECT Table2.Col1, Table2.Col2 <br>
FROM TAB1 <br>
FULL OUTER JOIN Table2 <br>
ON Table1.Col1 = Table2.Col1 AND Table1.Col2 = Table2.Col2 <br>
WHERE Table1.Col1 IS NULL AND Table1.Col2 IS NULL
使用UNION
似乎是一个更好的选择,但任何人都能够解决空间问题,即必须选择大型数据集到新表并删除它。
120,000,000条记录就是一个例子。还有其他表有更多的记录。
答案 0 :(得分:1)
我想我会这样做:
UNION
我应该注意到你描述的两种方法并不等同。 FULL OUTER JOIN
删除表内和表之间的重复项,因此新表中的行都是不同的。 ship_date - LAG(ship_date) OVER (ORDER BY ship_date)
不会从表格中删除重复项。
答案 1 :(得分:1)
我不明白你为什么要使用第三张桌子。
我会选择这样的东西:
INSERT INTO Table1 (<Columns list>)
SELECT <Columns list> FROM Table2
EXCEPT
SELECT <Columns list> FROM Table1
如果除了不够快,可能使用不存在并添加相关索引。