我有两张桌子:一张是大约2亿行,另一张是大约1亿张。我需要将它们连接在一起并选择大约3/4的行和1/6的列,因此创建了一个新表,并使用以下方法插入它:
INSERT INTO NEWTABLE
SELECT COLUMN1, COLUMN2, COLUMN3, COLUMN4
FROM TABLE1
UNION ALL
SELECT COLUMN1, COLUMN2, COLUMN3, COLUMN4
FROM TABLE2
LOCK IN SHARE MODE;
这需要一段时间。实际上是天。
我这样做是最快的方式吗?
我感觉是查询不是主要问题 - 它是将两个源表复制到占用时间的临时表。我该如何证明这一点?如果是这样的话,我可以绕过它吗?
谢谢!
答案 0 :(得分:5)
为什么选择联盟?
INSERT INTO NEWTABLE
SELECT COLUMN1, COLUMN2, COLUMN3, COLUMN4
FROM TABLE1
LOCK IN SHARE MODE;
INSERT INTO NEWTABLE
SELECT COLUMN1, COLUMN2, COLUMN3, COLUMN4
FROM TABLE2
LOCK IN SHARE MODE;
实现了同样的目标。
答案 1 :(得分:0)
删除UNION ALL就足够了。尽管如此,如果你遇到问题,请在这里发布时差。