我正在阅读使用TABLOCK表提示的内容。
像这样的语句
INSERT INTO Tab1
SELECT * FROM Tab2
可以优化事务日志记录。
我不理解这个,因为Tablock
会锁定整个表,所以其他进程无法访问它,那么如何优化事务日志记录呢?
我正在阅读使用TABLOCK表提示的内容。
像这样的语句
INSERT INTO Tab1
SELECT * FROM Tab2
可以优化事务日志记录。
我不理解这个,因为Tablock
会锁定整个表,所以其他进程无法访问它,那么如何优化事务日志记录呢?
如果没有使用TABLOCK
提示语,SQL Server将使用其普通的行级锁定——因此对于每个它试图插入的行,它将锁定正在插入的新行,然后继续。这可能会增加需要保持和管理的大量锁。
使用TABLOCK
只是为进程锁定整个表,因此在运行那个INSERT ... SELECT ...
语句时,其他事务无法访问该表——但只有一个锁(在表上)存在,因此与拥有数十、数百甚至数千个针对新插入行的单个锁相比,管理开销要小得多。