Mysql 工会需要几天的时间。加速?

Mysql 工会需要几天的时间。加速?,mysql,sql,performance,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亿行,另一张大约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;
这需要一段时间。事实上,是几天

我这样做是最快的方式吗

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

谢谢大家!

为什么要联合所有人

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;
达到同样的效果。

为什么要联合所有人

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;

达到同样的效果。

移除所有的联合就足够了。尽管如此,如果你有问题,请在这里张贴时差

禁用NEWTABLE上的索引(如果有) 运行两个insertddl。 启用索引
除去所有的工会就足够了。尽管如此,如果你有问题,请在这里张贴时差

禁用NEWTABLE上的索引(如果有) 运行两个insertddl。 启用索引
你不能单独插入吗?你能给我们一个准确的时间吗?执行计划说什么?你不能单独插入吗?你能给我们一个准确的时间吗?执行计划说什么?那样会更快吗?还有一个愚蠢的问题对不起,我正在学习-如果那样更快,联合的意义是什么?@dazedandfuzzle,好吧,你可以选择而不插入,有时你可能想在一个查询中统一两个结果集。我建议在您的情况下,限制性能因子是增加新表上的索引,因此这可能没有您希望的那么大帮助。@Dazed and Middle如果您创建新表只是为了聚合结果,您将从更早的应用条件中获益。这样,您只需处理四分之一的数据,就可以从基表上的任何索引中获益。非常感谢您的帮助你能解释一下吗?我从中聚合的表只有读取权限。你是在建议一个中间步骤吗?@dazed和困惑的是,正如你在问题中所说,你想选择数据的1/4。您越早这样做,引擎需要搅动的数据就越少。有效地,将WHERE子句添加到子查询中。如果你有足够的内存,你可能会发现避免使用NEWTABLE并继续使用UNION会更快吗?还有一个愚蠢的问题对不起,我正在学习-如果那样更快,联合的意义是什么?@dazedandfuzzle,好吧,你可以选择而不插入,有时你可能想在一个查询中统一两个结果集。我建议在您的情况下,限制性能因子是增加新表上的索引,因此这可能没有您希望的那么大帮助。@Dazed and Middle如果您创建新表只是为了聚合结果,您将从更早的应用条件中获益。这样,您只需处理四分之一的数据,就可以从基表上的任何索引中获益。非常感谢您的帮助你能解释一下吗?我从中聚合的表只有读取权限。你是在建议一个中间步骤吗?@dazed和困惑的是,正如你在问题中所说,你想选择数据的1/4。您越早这样做,引擎需要搅动的数据就越少。有效地,将WHERE子句添加到子查询中。如果您有足够的内存,您可能会发现避免使用NEWTABLE并继续使用UNION ALL会更快