我有一个自定义导入工具,可以在 temp 中批量插入数据(421776 行)。之后,该工具将未知行插入到目标表中,并根据散列键(2 列的组合)更新现有行。目标数据库的行数几乎相同。更新查询看起来像这样(大约少了 20 个更新列)
update targetTable set
theDB.dbo.targetTable.code=temp.code,
theDB.dbo.targetTable.name=temp.name,
from [tempDB].[dbo].[targettable] as temp
where theDB.dbo.targetTable.hash=temp.hash COLLATE SQL_Latin1_General_CP1_CI_AS
我知道 nvarchar 与 collate 比较有点糟糕,但不容易避免。哈希列仍然有它自己的唯一索引。在本地它也运行良好,但在我的这台服务器上,临时数据库不断增长到 21 gig。重新索引和缩小根本不起作用。
对于面临 tempdb 问题的其他人来说,这只是一个旁注。一个很好的阅读是http://bradmcgehee.com/wp-content/uploads/presentations/Optimizing_tempdb_Performance_chicago.pdf