如何有效地合并两个大型MySQL表?

时间:2011-07-09 17:44:56

标签: mysql sql

这是我的问题。我有两个MySQL表,一个有330万条记录,另一条有700,000条记录。第二个表中的所有700,000条记录都存在于第一个表中,两个表中有一个共同的列。我想从两个表中为所有700,000条记录选择*并将它们插入到新表中。我已经为两个共同的列创建了一个索引。这就是我通常会做的事情

INSERT INTO MergedTable (FirstName TEXT, LastName TEXT, Address TEXT) SELECT FirstNameFromTable1, LastName, Address FROM Table1, Table2 WHERE FirstNameFromTable1 = FirstNameFromTable2

但是表的大小导致此语句挂起,最终请求被中断。关于如何更有效地做到这一点的任何想法?作为参考,这里是我用来制作两个表的命令。谢谢你的帮助。

CREATE TABLE Table1 ( FirstNameFromTable1 varchar(300), LastName TEXT, index(FirstNameFromTable1) );
CREATE TABLE Table2 ( FirstNameFromTable2 varchar(300), Address TEXT, index(FirstNameFromTable2) );

1 个答案:

答案 0 :(得分:0)

Chunk it:

insert into MergedTable (...)
select top 10000 ... from Table1,Table2
where FirstNameFromTable1=FirstNameFromTable2
and not exists (select * from MergedTable where FirstName=FirstNameFromTable1)

运行此命令直到row_count()为0,您将需要MergedTable.FirstName上的索引