【问题标题】:MySQL INSERT VS UPDATEMySQL 插入 VS 更新
【发布时间】:2014-06-03 10:54:03
【问题描述】:

我需要从合作伙伴的服务器中检索大约 60,000 多条 MySQL 记录并将其保存到我的数据库中。我的脚本需要每天执行 3 次 (60K+ X 3)

哪个更好更快

DELETE ALL Records from my DB -> Retrieve Records from Partner DB -> Insert Records to my DB

OR

Retrieve records from partner DB -> Update my DB records (if exist) / INSERT (if not exist)

注意:如果是更新,我需要更新记录的所有字段

【问题讨论】:

  • 前者可能更快 - 删除所有记录可能最好通过 TRUNCATE 表或类似表实现...
  • 这可能取决于两个请求之间有多少变化。

标签: mysql


【解决方案1】:

根据我的观点,第二种方法会比第一种方法更快。因为如果 recoeds 已经存在,那么它将从插入中跳过该记录。

【讨论】:

  • 我必须不同意这一点。因为要让mysql知道,它必须搜索记录是否真的存在。
  • 但我仍然需要更新该记录的所有字段
  • 是的,它肯定会,如果记录存在,它不会插入该记录。这将为用户节省时间。
  • 你如何更新?例如,如果产品尺寸发生了变化
  • @sup.是的,但大多数记录通常每天都会更改
【解决方案2】:

您提出的两个操作序列不等价。 第二个操作序列不会删除从伙伴数据库中删除的行,而第一个序列会删除它们。

MySQL 提供REPLACE statement,它实际上与您的第二个序列相同,并且可能是最快的一个。对您的代码进行基准测试以确定。

【讨论】:

  • 如果我使用替换从合作伙伴数据库中删除的记录也将从我的数据库中删除而不进行任何测试/搜索?
  • 不,它们不会被删除!如果您使用 UPDATE+INSERT(您的第二个序列),它们也不会。
  • This question 你可能也会感兴趣。
  • 如果 Replace 和 Update 效果一样,还是用第一个序列(Delete ALL then Insert)更好?
【解决方案3】:

绝对是第二个

从合作伙伴数据库中检索记录 -> 更新我的数据库记录(如果存在)/插入(如果不存在)

删除是一项代价高昂的操作,尤其是。当您有 60k+ 条记录并考虑到架构在超时时间内保持不变时,只有值会发生变化。

另外,从这个角度考虑,如果更新,那么并不是所有的值都可能不需要更新,只有一些......所以这比删除并再次写入甚至可能包含一些您刚刚删除的相同值的值相对便宜! :)

不要只从deleting 的角度考虑它,还要考虑到您也必须Update DB....您更喜欢什么,总是更新 60k+ 值或者少于那个......

【讨论】:

  • 我不同意 - 如果他要删除所有记录,他可以截断甚至删除表。这是一个便宜的操作。
  • @NoobEditor。即使 Delete 只是一个简单的 DELETE * FROM 表这里? (无需一一搜索记录)
  • @vogomatix : updat 数据库怎么样,delete 不是这里要考虑的唯一操作? :)
  • 删除后,他只是插入所有记录,不需要检查它们是否存在。这也比 UPDATE/INSERT (REPLACE) 操作便宜
猜你喜欢
  • 1970-01-01
  • 2019-04-03
  • 2016-01-13
  • 2013-03-06
  • 2015-04-25
  • 2014-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多