鍍金池/ 問答/數據庫/ mysql 數據存在則更新,不存在則插入,如何提高效率?

mysql 數據存在則更新,不存在則插入,如何提高效率?

現在需要根據一行數據先判斷是否在數據表中, 存在則更新, 不存在則插入,
但是當有2000多行數據需要執(zhí)行這樣的業(yè)務邏輯時,我發(fā)現效率很低, 一開始比較快, 大概超過1000行后會逐漸降低速度, 目前的方案是 :
先根據條件查詢是否存在,不存在則插入, 存在則更新, 這樣一條數據需要執(zhí)行兩條sql, 并且不能批量插入.這樣一條條執(zhí)行的效率極低.
我的優(yōu)化方案是,

  1. 使用 ON DUPLICATE KEY 來讓mysql自行解決該邏輯.
  2. 使用 replace 來解決.

但是這兩種方法都是mysql本身的特性, 想請教大家是否有什么更好的方案來提高這樣的執(zhí)行效率?

回答
編輯回答
亮瞎她

幾千條數據,效率不會太差吧,注意把比較是否存在的字段加上索引就行了。

如果確實數據量大(最少也幾十萬級別),可以考慮用批量加載的方式先插入到臨時表,然后用sql語句做后續(xù)的更新或插入操作。

2018年2月18日 09:55
編輯回答
臭榴蓮

效率問題需要由唯一鍵方式來解決,既提高了效率,又避免重復。其他幾種方式如不加索引數據量大時也同樣存在效率問題。

2017年1月14日 22:15