2009-12-11 103 views

回答

3

不,没有。

INSERT ON DUPLICATE KEY UPDATE将找到记录并更新它,就像一个简单的UPDATE会做的那样。

事实上,这只是一个UPDATE,如果UPDATE失败,后面是INSERT

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 

请参阅本文中我的博客更多的细节:

0

我想给出一个更细致的答案。这取决于DBMS的实施。尽管如此,从经验来看,我可以告诉你,大多数DBMS对INSERT ... ON DUPLICATE UPDATE都有很好的支持。

事实上,它往往可以带来更好的性能,使用自DMBS可以组这些命令,从而减少工作要做INSERT ... ON DUPLICATE UPDATE。这是与MySQL的情况下,你经常可以看到一些速度10〜20%的增幅比较简单的插入+更新策略,没有任何形式的配料。总的来说,我会推荐INSERT ... ON DUPLICATE UPDATE,因为它更简单易用,代码更容易维护,并且通常会带来额外的速度优势。

+0

哪些是支持这一条款的人的DBMS(除'MySQL')? – Quassnoi

相关问题