2011-07-09 9 views
2

これは私の問題です。私は2つのMySQLテーブルを持っています。一つは330万レコード、もう一つは700000レコードです。 2番目のテーブルにあるすべての700,000レコードが最初のテーブルに存在し、2つのテーブルには共通の1つのカラムがあります。私は、70万レコードすべての両方のテーブルから*を選択し、それらを新しいテーブルに挿入したいと思います。私は共通の両方の列のインデックスを作成しました。ここで私は通常2つの大きなMySQLテーブルを効率的にマージする方法はありますか?

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

を行うだろう。しかし、テーブルのサイズがハングし、最終的に要求が中断されたこの文を引き起こすものです。どのようにこれをより効率的に行うためのアイデアですか?参考までに、ここでは2つのテーブルを作成するために使用したコマンドを示します。ご協力いただきありがとうございます。

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

答えて

0

チャンクそれ:ROW_COUNTまで()

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

実行これが0である、あなたは明らかに

MergedTable.FirstNameにインデックスをお勧めします
関連する問題