我正在阅读使用 TABLOCK 表提示

对于像这样的声明

INSERT INTO Tab1
SELECT * FROM Tab2

可以优化事务日志。

我不明白这一点,因为 Tablock 将锁定整个表,因此其他进程无法访问它,那么这将如何优化事务日志记录?

最佳答案

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

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

关于sql-server - 用于优化插入选择语句的事务日志的 TABLOCK,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18680943/

10-10 12:31