Gam*_*r84 0 sql-server locking nonclustered-index unique-constraint
我想知道当涉及到 KEY 锁时,SQL Server 对于唯一非聚集索引和非唯一聚集索引的行为是否有所不同。
理论上是的,实际上不是。
如果 SQL Server 可以保证某个字段是唯一的,那么它就可以以不同的方式构建执行计划。Rob Farley 在 AdventureWorks 上写了一个博客示例,其中唯一索引甚至没有显示在执行计划中,但它的存在让 SQL Server 可以构建更好的计划。
如果您的数据确实符合唯一索引的条件,那么将其指定为唯一索引将确保当您搜索一个值时,SQL Server 始终估计返回 1 行。这意味着您更有可能获得更细粒度的锁而不是表锁。
但是,如果您担心锁升级,可能是因为您没有寻求平等。您正在加入其他表,或使用范围搜索。在这些情况下,索引的唯一性并不能拯救你。