UNION ALL需要几天时间。加速中?

时间:2013-04-22 14:03:50

标签: mysql sql performance

我有两张桌子:一张是大约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;

这需要一段时间。实际上是天。

我这样做是最快的方式吗?

感觉是查询不是主要问题 - 它是将两个源表复制到占用时间的临时表。我该如何证明这一点?如果是这样的话,我可以绕过它吗?

谢谢!

2 个答案:

答案 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就足够了。尽管如此,如果你遇到问题,请在这里发布时差。

  • 如果具有
  • ,则禁用NEWTABLE上的索引
  • 运行两个INSERT DDL。
  • 启用索引编制