我在ASP.Net网站+ SQL服务器数据库中继承了以下情况:
有一个大表(许多行,很多列),在一个名为PartnerRef的字段上,该索引具有唯一索引varchar(50)。它还有一个主键int,我们称它为UniqueId。在8到10年的时间里,根据PartnerRef字段的唯一性编写了许多代码。许多地方/查询使用PartnerRef = @ partnerRef条件来查找一条特定记录。突然之间,我们收到一个消息,合作伙伴有时甚至在一个星期后就将开始重用值,因此可能必须创建一个新记录,而另一个已经存在且具有相同PartnerRef的记录。由于时间紧迫,目前无法删除唯一索引并更改所有代码。我实施的快速解决方案是在每次插入之前执行更新:
Update Table1
set PartnerRef = PartnerRef + '_' + Cast(UniqueId as varchar(10))
where PartnerRef=@partnerRef;
Insert new record using @partnerRef;
因此,更改先前/现有记录中的字段的值,然后创建新记录。旧记录无法立即删除,但是在重新使用后,旧记录中的原始值不再那么重要,因此我可以毫无问题地对其进行修改。更新查询在每次新插入之前运行,但是大多数情况下(可能是90%)它不会更改任何内容,并且不存在具有相同PartnerRef的先前记录。除了整个表结构情况的愚蠢性之外,我的实际问题是有关性能和更新过程的优化。使用IF EXISTS UPDATE而不是简单的更新会有任何好处吗?
IF EXISTS (SELECT 1 FROM Table1 WHERE PartnerRef=@partnerRef)
Update Table1
set PartnerRef = PartnerRef + '_' + Cast(UniqueId as varchar(10)) where PartnerRef=@partnerRef;
在我们更改Web应用程序并删除唯一索引以允许PartnerRef中重复之前,是否有更好/更快的方法来进行此更新?谢谢你的想法。