0

私のアプリ (MySQL を使用) は、多数の後続の upsert を実行しています。現在、私のSQLは次のようになっています。

INSERT IGNORE INTO customer (name,customer_number,social_security_number,phone) VALUES ('VICTOR H KINDELL','123','123','123')
INSERT IGNORE INTO customer (name,customer_number,social_security_number,phone) VALUES ('VICTOR H KINDELL','123','123','123')
INSERT IGNORE INTO customer (name,customer_number,social_security_number,phone) VALUES ('VICTOR H KINDELL OR','123','123','123')
INSERT IGNORE INTO customer (name,customer_number,social_security_number,phone) VALUES ('TRACY L WALTER PERSONAL REP FOR','123','123','123')
INSERT IGNORE INTO customer (name,customer_number,social_security_number,phone) VALUES ('TRACY L WALTER PERSONAL REP FOR','123','123','123')

これまでのところINSERT IGNORE、アップサートを実現する最速の方法であることがわかりました。レコードを選択して存在するかどうかを確認し、それを更新するか新しいレコードを挿入するのは遅すぎます。レコードごとに個別のステートメントを実行する必要があるため、これでも思ったほど高速ではありません。時には、これらのステートメントを約 50,000 回続けて使用することもあります。

既存のレコードを削除せずに、これらすべてを 1 つのステートメントで処理する方法はありますか?

4

1 に答える 1

0

1つのインサートにすべてを入れることができます INSERT IGNORE INTO table_1 (field1, field2) VALUES ('val1', 'val2'), ('val3', 'val4'), etcINSERT ... ON DUPLICATE KEY UPDATEアップデータまたはレコードの挿入が必要かどうかを確認することもできます。

于 2011-01-14T21:56:55.630 に答える