1

私は 900 万行のテーブルを持っていますが、その膨大なサイズのために、このすべてのデータを処理するのに苦労しています。

私がやりたいことは、データを上書きせずに IMPORT a CSV をテーブルに追加することです。

このようなことをする前に。INSERT if not in(select email from tblName where source = "number" and email != "email") INTO (email...) VALUES ("email"...)

しかし、またサーバーがクラッシュするのではないかと心配しています。10,000 の行をテーブルに挿入できるようにしたいのですが、それが source = "number" のテーブルにない場合に限ります。

それ以外の場合は、メール列で一意に使用されます。

要するに、2 つのことをチェックして、テーブルに重複を導入することなく、できるだけ早く INSERT を実行したいと考えています。email != "email" AND source != "number" then insert into table の場合、それ以外の場合は何もしません。また、エラーレポートも必要ありません。

私の言葉遣いが悪く、質問が少しばかげて申し訳ありません。

バックアップをダウンロードして、問題が発生した場合はアップロードして、データでテストすることができなかったことに苦労しています。私は大規模なデータセットが嫌いです:)

お時間をいただきありがとうございました -BigThings

4

2 に答える 2

3

これらのフィールドに一意のキーがある場合は、LOAD DATA INFILE を IGNORE オプションとともに使用できます。行ごとに挿入するよりも高速であり、複数挿入するよりも高速です。

http://dev.mysql.com/doc/refman/5.1/en/load-data.htmlを見てください。

于 2011-08-28T17:08:18.607 に答える
0

UNIQUEと列に制約を設定しemailますsource

次に、次のことを行います。

INSERT INTO table_name(email, source, ...) VALUES ('email', 'source', ...)
ON DUPLICATE KEY UPDATE email = email;

INSERT IGNOREいかなる種類のエラーも通知しません。私はそれをお勧めしません。どちらもお勧めしませんINSERT ... WHERE NOT IN。MySQLには、そのためにすでに十分に最適化された機能があります。それがそこにある理由INSERT ... ON DUPLICATE KEY UPDATEです。

于 2011-08-28T17:08:53.903 に答える