TABLOCK用于优化插入选择语句的事务日志记录

时间:2013-09-08 06:03:50

标签: sql-server logging optimization transactions

我正在阅读使用TABLOCK表提示

对于像

这样的陈述
INSERT INTO Tab1 
SELECT * FROM Tab2

可以优化事务记录。

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

1 个答案:

答案 0 :(得分:16)

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

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