2009-12-11 50 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

相關問題