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