0

我有如下声明

CREATE TABLE INPUT_OUTPUT 
SELECT T1_C1,.....,T1_C300, T1_PID from T1 
    INNER JOIN (SELECT T2_C1,T2_C2,T2_PID FROM T2) as RESPONSE ON T1.T1_PID=RESPONSE.T2_PID

运行速度非常慢 - 现在运行了 5 个小时。这两个表有大约 400 万行和几百列。

我有一台 8 核、64gb ram ubuntu-linux 机器,使用 top 我可以看到 mysql 进程只在一个内核上使用了 3gb,尽管它的使用率始终保持在 100%。令人不安的是,并非所有内核都在使用。

我想比这更快地创建表。

我应该使用

CREATE TABLE INPUT_OUTPUT LIKE T1

通过为 T2 中相关的列添加额外的列来更改 INPUT_OUTPUT,然后填充它?我不确定这样做的语法以及它是否会导致加速。

4

1 回答 1

0

T1_PID有索引吗?如果是这样,这应该运行得很快。运行查询EXPLAINSELECT一部分,看看它说了什么。

也就是说,我不明白你为什么需要子查询。出什么问题了:

CREATE TABLE INPUT_OUTPUT 
SELECT T1_C1,.....,T1_C300, T1_PID, T2_C1, T2_C2, T2_PID
FROM T1 INNER JOIN T2 ON T1.T1_PID=T2.T2_PID

如果有一个或 有一个索引T1,则使用后者应该可以工作。T2PID

于 2012-09-03T04:39:57.290 回答