我的声明如下
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,然后填充它?我不确定这样做的语法以及它是否会导致加速。
答案 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> T1
或T2
具有PID
索引,则使用后者应该有效。