4

我正在阅读使用 TABLOCK 表提示

对于像这样的声明

INSERT INTO Tab1 
SELECT * FROM Tab2

可以优化事务日志。

我不明白这Tablock会锁定整个表,所以没有其他进程可以访问它,那么这将如何优化事务日志记录?

4

1 回答 1

16

如果没有TABLOCK提示,SQL Server 将使用其正常的行级锁定 - 因此对于它尝试插入的每一行,它将锁定正在插入的新行,然后继续。这可能会增加很多需要持有和管理的锁。

使用TABLOCK只是锁定进程的整个表,因此当该INSERT ... SELECT ...语句运行时,没有其他事务可以访问该表 - 但是只有一个锁(在表上),因此管理开销的数量要小得多在新插入的行上拥有数十个、数百个甚至数千个单独的锁。

于 2013-09-08T06:44:54.957 回答