在某些情况下,INSERT INTO <tablename> (WITH TABLOCK)由于日志记录最少,执行 an 会更快。这些情况包括将数据库置于BULK_LOGGED恢复模型中。
INSERT INTO <tablename> (WITH TABLOCK)
BULK_LOGGED
当数据库 ( tempdb ) 使用恢复模型时,在空表上WITH TABLOCK使用是否还有其他潜在的性能优势?INSERT``SIMPLE
WITH TABLOCK
INSERT``SIMPLE
我正在使用 SQL Server 2012 标准版。
我的用例是使用一个存储过程创建并立即填充一个临时表INSERT...SELECT,它可能包含多达几百万行。我尽量避免这种tempdb滥用,但有时需要这样做。
INSERT...SELECT
我正在尝试建立一个案例来要求TABLOCK. 它似乎不会伤害任何东西,并且可能有好处。我试图弄清楚是否有足够的潜在好处将它添加到我们代码库的任何地方,我确信没有其他进程想要写入表。
TABLOCK
我通常使用集群 PK 插入到新创建的本地临时表中,但有时会使用堆。
我知道一些好处,但它们主要是视情况而定。
新插入的行是页面压缩的: 如果新行转到具有页面压缩的现有页面 如果新行是通过带有 TABLOCK 的 BULK INSERT 插入的 如果通过 INSERT INTO … (TABLOCK) SELECT FROM 插入新行 否则,该行是行压缩的。
新插入的行是页面压缩的:
否则,该行是行压缩的。
IDENTITY
OUTPUT
另见数据加载性能指南