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

4

我正在阅读使用TABLOCK表提示的内容。

像这样的语句

INSERT INTO Tab1 
SELECT * FROM Tab2

可以优化事务日志记录。

我不理解这个,因为Tablock会锁定整个表,所以其他进程无法访问它,那么如何优化事务日志记录呢?

1个回答

16

如果没有使用TABLOCK提示语,SQL Server将使用其普通的行级锁定——因此对于每个它试图插入的行,它将锁定正在插入的新行,然后继续。这可能会增加需要保持和管理的大量锁。

使用TABLOCK只是为进程锁定整个表,因此在运行那个INSERT ... SELECT ...语句时,其他事务无法访问该表——但只有一个锁(在表上)存在,因此与拥有数十、数百甚至数千个针对新插入行的单个锁相比,管理开销要小得多。


marc_s:当我们想在数据仓库中的FactTable上执行Merge操作时,是否应该使用TabLock?TabLock能否提高TRSF模式和DW模式之间合并语句的性能? - Ardalan Shahgholi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接