从内连接创建表非常慢

时间:2012-09-03 04:13:29

标签: mysql linux performance join

我的声明如下

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,然后填充它?我不确定这样做的语法以及它是否会导致加速。

1 个答案:

答案 0 :(得分:0)

T1_PID是否有索引?如果是这样,这应该很快。运行查询EXPLAIN部分的SELECT,看看它的内容。

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

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

如果 <{em> T1T2具有PID索引,则使用后者应该有效。