我应该在插入之前检查键是否存在或在插入时处理异常吗?

Ido*_*. J 5 sql sql-server exception

哪个操作成本更高 -SELECT在之前发出查询INSERT,还是在操作期间处理异常INSERT

例如,假设我想将一些用户请求参数param1(主键和唯一索引)持久保存到数据库表,param2param3要求在已存在重复键时显示通知。此外,假设它是一个实时场景,整个过程预计不会超过 500 毫秒。

为什么经常建议对三个参数执行插入语句,然后处理插入异常以处理重复项?我知道抛出异常是有成本的——数据库查询的成本是否超过抛出异常的成本?

HLG*_*GEM -1

如果我插入 1,000,000 次并先检查然后插入,即 1,000,000 次检查,也就是说,957,512 次插入,总共针对数据库执行了 1,957,512 次操作。我仍然需要为未通过初始检查的 42,488 条记录中的每一条向用户发送消息。

如果我插入并抛出异常,我将针对数据库执行 1,000,000 个操作,并处理 42,488 个异常。

因此,开展业务的第一种方式是在数据库上进行更多工作。

  • 我对此投了反对票,因为没有任何有关检测重复主键与处理异常所花费的有效时间的指标,我认为这个答案没有用。我强烈希望检测重复项的性能会更高,因为它使用的是数据库系统,因为它的设计目的是使用,并且异常处理的成本是众所周知的。 (2认同)