Ras*_*dit 3 database sql-server oracle db2
我有一个表user_id,电子邮件,默认.默认存储"Y"或"N",具体取决于电子邮件是否为用户默认电子邮件.每个用户只能有一个默认电子邮件.
当用户在表上进行更新或插入时,在我的SP中检查用户是否已将isDefault传递为"Y".如果是这样,我需要更新该用户的所有条目以使其默认为"N".我的问题是:考虑到没有锁定问题(不超过一个线程将从特定用户的表中请求数据)以下查询中的哪一个最耗时:
update table
set default = 'N'
where user_id = 'abc'
and default = 'Y'
Run Code Online (Sandbox Code Playgroud)
(默认='Y'检查的开销)
要么
update table
set default = 'N'
where user_id = 'abc'
Run Code Online (Sandbox Code Playgroud)
(更新用户的所有记录的开销)
99%的确定性我可以说第一个查询会更高效.
您的聚类键可能是user_id,因此您的UPDATE语句将很快找到要更新的行.更新在SQL Server中以逻辑方式实现为删除,然后是插入,因此它可能是一个相当昂贵的操作(相对于简单的查找).
结合UPDATE需要对记录进行独占锁定的事实,并且所有迹象都指向语句1.
归档时间: |
|
查看次数: |
184 次 |
最近记录: |