【发布时间】:2015-10-10 12:04:18
【问题描述】:
哪个操作更昂贵——在INSERT 之前发出SELECT 查询,还是在INSERT 操作期间处理异常?
例如,假设我想将一些用户请求参数如param1(主键和唯一索引)、param2、param3 持久保存到数据库表中,并要求在存在重复键时显示通知已经。此外,假设它是一个实时场景,整个过程预计不会超过 500 毫秒。
为什么经常建议对三个参数执行插入语句,然后处理插入异常以迎合重复?我知道抛出异常是有代价的——数据库查询的成本是否超过抛出异常的成本?
【问题讨论】:
-
您可以通过 A 与 B 代码示例使这个问题更加清晰。即使在修订之后,我也无法用代码来描述您要描述的内容。 “将参数保存到数据库”是什么意思?将它们插入表格中?
-
你为什么不两者都做呢?尽可能防止异常,并尽可能处理异常,都是很好的做法。
-
您希望多久尝试一次插入副本?表格是否正确编入索引?
-
@TabAlleman 是的,使用常规 sql
INSERT INTO MyTable(col1, col2, col3) VALUES (param1, param2, param3)插入数据库表。现在,如果表中存在param1的重复项,则上述操作可能会失败。先做一个SELECT col1 FROM MyTable WHERE col1='@P1',如果没有重复就插入还是直接插入并捕获异常更有效?
标签: sql sql-server exception-handling