Eva*_*oll 2 sql postgresql merge upsert
这个问题是关于一行,而不是一组.我很好奇使用最新版本的Pg(9.0)更快更好,为什么:
基于PKEYs上的SELECT的条件UPDATE或INSERT
尝试INSERT,在失败时捕获异常并回退到UPDATE
尝试更新,在失败时捕获异常并回退到INSERT
我认为因为这取决于数据集让我们假设三种情况:
存在意味着满足PKEY并且应该更新行.任何关于此研究的链接都会很棒.
第一个场景永远不会比其他两个场景更快,因为您首先发出的SELECT是不必要的额外工作,并且由UPDATE(以及可能的INSERT)隐含地完成.
即使有50%/ 50%的分布,我认为使用UPDATE/INSERT稍微会更快,因为错误处理(捕获异常)比不更新任何内容的UPDATE花费更多的时间.
所以我会选择UPDATE/INSERT模式,除非你知道真的很多(例如> 70%)的行不会存在.
但只有在您的环境中进行良好的性能测试才能证明这一点.