1

关于设计存储过程的最佳实践,更新表中记录的存储过程应该使用主键来标识要更新的记录,还是使用唯一键?

唯一键似乎需要发送很多额外的参数,我想不出主键不知道的情况。

4

2 回答 2

2

我认为“唯一密钥”是指“业务密钥”。如果您有一个从某个外部源松散同步的数据库,那么业务密钥很适合用作存储过程的参数。

假设您从另一家公司收到了一个平面文件,用于订购产品、激活服务、启动流程或其他操作。他们可能不知道主键,并且可能会按名称请求事物:(公司 X,服务 Y,激活)您根据唯一的公司名称、唯一的服务名称、唯一的状态调用您的存储过程。当然,您可能会说远程系统应该使用 id,但这有时是您无法控制的。

另一个示例:在应用程序级别执行的复制。两个数据库之间的序列可能不同步,因此通过业务密钥引用远程记录会更安全。

于 2012-06-15T20:34:36.407 回答
1

这个问题有两个不同的方面。

  • 目标:您想要实现的是更新给定的行。任何能让你达到这一点的方法都是好的;换句话说,如果唯一键、主键或未在任何唯一性约束下列出的列的任何其他组合都可以,那么您可以使用它。
  • 表现:与任何其他查询一样,您真的想快速直接进入重点。这是什么意思?这意味着您必须在 where 子句中选择最有效的过滤器。您可以通过以下方式衡量:

1/您使用的索引的大小:选择最小的一个(例如列大小)

2/您正在使用的索引列的非空属性:(如果您的引擎允许可空列上的唯一索引)最好选择一个放置在不可空列上的索引。

3/ 索引的表空间:您还可以查看索引是否有特殊存储而不是另一个,这会提高性能(挂载索引...)

4/ 列类型:通常小数字比文本解析更快(抱歉没有来源,请小心处理)

我现在想不出更多了,但我很确定其他人会完成这份清单。

干杯。

于 2012-06-15T20:33:31.960 回答