我已经彻底阅读了有关表提示的MSDN,但我似乎没有找到锁定粒度默认值。假设我有以下查询:
SELECT TOP (1) * FROM MyTable WITH (UPDLOCK, READPAST) ORDER BY SomeColumn ASC;
你看,我指定了UPDLOCK
和READPAST
提示,但没有指定任何粒度提示,例如TABLOCK
或ROWLOCK
。
默认情况下使用哪个粒度锁定级别?
没有"默认值"。粒度(行、页、(分区 | 对象))是根据对象允许的选项 (allow_page_locks/allow_row_locks)、有关操作意图的信息(探测、扫描、插入)、行集的估计大小和许多其他因素(隔离级别、文件组是否只读等)动态计算的。在大多数情况下,您将获得单一实例操作的行级粒度和扫描的页面级粒度。您发布的查询可能会采用页面级粒度,因为是扫描。