我有5个表,每个表有180万到200万条记录,每个表都有重叠的列。
我正在尝试填充一个只有&我需要的记录,但在我的估计我的查询将需要1.7天完成。
我已经扩展了apache, mysql和php的内存使用在GB范围内,并设置任何和所有的超时在10天的区域。
那么,我的问题是填充这个新表的最好方法是什么?一旦我完成,我可以删除表1,2,3,4 &;
这是我的查询:
insert into new_table
(col1,col2,col3,col4,col5,col6,col7,col8,col9)
select
t1.col1,t.2col2,t.3col3,.t4col4,t5.col5,t1.col6,t1.col7,t2.col8,t3.col9
from
table1 as t1,
table2 as t2,
table3 as t3,
table4 as t4,
table5 as t5
where
t1.col1 = t2.col1
and
t1.col1 = t3.col1,
and
t1.col1 = t4.col1,
and
t1.col1 = t5.col1
幸运的是这非常简单。可以将SELECT
查询添加到CREATE TABLE
。
CREATE TABLE newtable SELECT t1.c1,t2.c2,t3.c3,t4.c4,t5.c5 FROM t1
INNER JOIN t2 ON t1.c1 = t2.c1
INNER JOIN t3 ON t1.c1 = t3.c1
INNER JOIN t4 ON t1.c1 = t4.c1
INNER JOIN t5 ON t1.c1 = t5.c1
等等,但是您当前正在创建当前的SELECT
语句。我使用显式连接,因为我认为它们更容易理解,但你的查询也会起作用。您可能还想添加一个PRIMARY KEY
,但是您总是可以在之后修改表来完成此操作。
ALTER TABLE newtable ADD PRIMARY KEY(c1);
就是这样!你就完成了。