1

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

这需要一段时间。其实天。

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

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

谢谢!

4

2 回答 2

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;

达到同样的效果。

于 2013-04-22T14:07:59.230 回答
0

删除 UNION ALL 就足够了。尽管如此,如果您遇到问题,请在此处发布时差。

  • 如果 NEWTABLE 有索引,则禁用它
  • 运行两个 INSERT DDL。
  • 启用索引
于 2013-04-23T06:39:11.987 回答