0

vps Mem:524 (215used) Swap:524(75used) 、mysql 5.1.61 に 3 つのテーブルがあります。

1 つの列「data」を持つテーブル「new」には、100 000 レコードが含まれています。

レコード1

記録2

レコード3

1 つの列「data」を持つテーブル「old」には、1 000 000 レコードが含まれています。

レコード1

記録4

記録5

1つの列「データ」を持つテーブル「結果」も。

テーブル 'new' をテーブル 'old' と比較し、テーブル 'old' にないレコードをテーブル 'result' に挿入します。この例では、

記録2

レコード3

クエリを使用します

INSERT INTO result 

SELECT data FROM new 

LEFT JOIN old USING (data) 

WHERE old.data IS NULL

私の問題 - このクエリは 1 時間以上、またはそれ以上実行されます (これ以上待ちきれません)。

そのようなmysql操作のより迅速な方法を知りたいです。理想 - 10 ~ 20 分。

4

1 に答える 1

1

このクエリはより高速になると思います:

insert into result
select data 
from new n
where not exists 
(select 1 from old where data = n.data)

dataまた、ファイルされたテーブルnewoldテーブル(テーブルにはない)のインデックスresultにより、パフォーマンスが大幅に向上します。

次の方法でインデックスを追加できます。

create index ind1 on old(data)
于 2012-09-22T06:53:37.293 に答える