按主键或唯一键更新记录

时间:2012-06-15 19:53:38

标签: sql stored-procedures

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

Unique Key似乎要发送很多其他参数,我想不出主键不知道的情况。

2 个答案:

答案 0 :(得分:2)

通过"唯一键"我认为你的意思是"商业密钥"。如果您有一个与某些外部源松散同步的数据库,则可以使用业务键作为存储过程的参数。

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

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

答案 1 :(得分:1)

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

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

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

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

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

4 /列类型:通常较小的数字比文本解析更快(道歉没有来源,请小心使用)

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

干杯。