mysql一括更新

1271 ワード

mysql更新最適化:
バージョンの更新はいずれもupdate set方式を採用していますが、一括更新が必要な場合は、forループで更新を実行するしかありません.あるいはexecuteBatch方式で更新を実行します.いずれにしても、性能はそれほどよくない.
3千件以上の更新は、3分以上かかります.
一括更新の最適化をクエリーし、replace intoという方法があります.
replace into tableName(id,status) values(id1,status1),(id2,status2),...,(idn,statusn)

この方式では,idがプライマリキーである必要がある.その更新方式は,更新を実行する際にidキーが存在することを発見した場合には,まず削除を実行してから挿入を行い,idキーが存在しない場合には挿入を実行する.したがって、更新を実行すると、id、statusの2つのフィールドを除いて、他のフィールドの値はnullであることがわかります.
だからこの方法は向いていません.
もう1つの一括更新方法があります.
insert into tableName(id,status) values(id1,status1),(id2,status2),...,(idn,statusn) on duplicate key update status=values(status)

この方式はreplace intoの方式と似ており、idをプライマリキーとし、挿入を実行する必要もあり、idが存在する場合、on duplicate key updateの後の更新を実行し、元のレコードを削除することはありません.
複数のフィールドの更新を実行する場合は、on duplicate key updateの後に複数のfield=values(field)を追加します.
INSERT INTO keywordtable(id, keyword, userName, userID) VALUES(1, '  ', 'Eliot', 22), (2, 'hello', 'Jhon', 23),   
(3, '  ', 'Jim', 24) ON DUPLICATE KEY UPDATE keyword=VALUES(keyword), userName=VALUES(userName),userID=VALUES(userID);

最適化後、1万以上のデータ更新を実行しても、わずか1秒以上かかります.