不断尝试插入现有键值是不好的做法

Bra*_*n C 0 java sql oracle entity-relationship

我很想知道以下两个细节.

  1. 它是否被认为是不好的做法,或者是连续尝试插入重复数据并允许dbms强制执行实体的约束以拒绝这些插入的最差性能.或者更好的做一些SELECT COUNT(1)并且只在count不为1时才插入.

  2. 假设从第一个项目开始,从dbms角度来看,实施实体的约束并且不进行多次调用会更有效.由于代码不必要地进入异常块,即使不处理异常,应用程序代码(Java,.NET等)也会受到更大的性能影响.

可能重复:使用主键将数据插入SQL表.对于欺骗 - 允许插入错误或首先选择?

Gor*_*off 5

在性能方面,最好使用数据库内功能来强制执行约束.

当您尝试在数据库外部强制执行约束时,您有两个问题.第一个是你有运行单独查询,返回结果和执行逻辑 - 几个数据库操作的开销.另一方面,使用约束可能会执行相同的工作,但它在数据库中完成所有操作,而没有额外的来回传递事务的开销.

其次,当您尝试自己强制执行约束时,您会引入竞争条件.这意味着你可以运行它count()并返回0.同时,另一个事务插入值,然后插入失败.你真的想避免这种竞争条件.当然,一种解决方案是将所有逻辑放在单个事务中.这引入了自己的开销.