(MYSQL)是否有任何显着的性能差异或其他原因不使用INSERT ... ON DUPLICATE UPDATE
sql通过PK /插入新内容来更新?
答案 0 :(得分:3)
不,没有。
INSERT ON DUPLICATE KEY UPDATE
将找到记录并更新它,就像一个简单的UPDATE
一样。
实际上这只是UPDATE
,如果INSERT
失败,则会UPDATE
。
INSERT ON DUPLICATE KEY UPDATE
可以更快地替代分组更新(当您有一个源表,每个键有多个记录,并希望每个记录增加一次目标表)。
如果每个键的值很少,则此查询:
INSERT
INTO t_target
SELECT target, cnt
FROM t_sparse d
ON DUPLICATE KEY UPDATE
t_target.cnt = t_target.cnt + d.cnt
将比这更有效:
INSERT
INTO t_target
SELECT target, cnt
FROM (
SELECT target, SUM(cnt) AS cnt
FROM t_sparse di
GROUP BY
target
) d
ON DUPLICATE KEY UPDATE
t_target.cnt = t_target.cnt + d.cnt
有关详细信息,请参阅我的博客中的这篇文章:
答案 1 :(得分:0)
我想给出一个更细致的答案。这取决于DBMS的实现。不过,根据经验,我可以告诉你,大多数DBMS对INSERT ... ON DUPLICATE UPDATE
都有很好的支持。
实际上,使用INSERT ... ON DUPLICATE UPDATE
通常可以带来更好的性能,因为DMBS可以对这些命令进行分组,从而减少了工作量。这是mysql的情况,与简单的插入+更新策略相比,你可以经常看到速度提高了10%到20%,没有任何类型的批处理。总的来说,我会推荐INSERT ... ON DUPLICATE UPDATE
,因为它使用起来更简单,代码更易于维护,并且通常会带来额外的速度优势。