mysql 数据存在则更新,不存在则插入,如何提高效率?

现在需要根据一行数据先判断是否在数据表中, 存在则更新, 不存在则插入,
但是当有2000多行数据需要执行这样的业务逻辑时,我发现效率很低, 一开始比较快, 大概超过1000行后会逐渐降低速度, 目前的方案是 :
先根据条件查询是否存在,不存在则插入, 存在则更新, 这样一条数据需要执行两条sql, 并且不能批量插入.这样一条条执行的效率极低.
我的优化方案是,

  1. 使用 ON DUPLICATE KEY 来让mysql自行解决该逻辑.
  2. 使用 replace 来解决.

但是这两种方法都是mysql本身的特性, 想请教大家是否有什么更好的方案来提高这样的执行效率?

阅读 4.8k
2 个回答

效率问题需要由唯一键方式来解决,既提高了效率,又避免重复。其他几种方式如不加索引数据量大时也同样存在效率问题。

几千条数据,效率不会太差吧,注意把比较是否存在的字段加上索引就行了。

如果确实数据量大(最少也几十万级别),可以考虑用批量加载的方式先插入到临时表,然后用sql语句做后续的更新或插入操作。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题