TSQL用TEMPDB中的其他更新大表会导致巨大的增长

时间:2011-05-03 15:37:17

标签: database tsql import tempdb

我有一个自定义导入工具,可以在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与整理比较有点不好但不容易避免。哈希列仍然拥有它自己的唯一索引。在本地它也很好,但在我的这个服务器上,临时数据库不断增长到21演出。重新索引和缩小根本不起作用。

对于遇到tempdb问题的其他人来说,这只是一个旁注。好的阅读是http://bradmcgehee.com/wp-content/uploads/presentations/Optimizing_tempdb_Performance_chicago.pdf

3 个答案:

答案 0 :(得分:0)

您可以暂时将事务日志记录从完全注册或批量注册更改为简单。这样可以防止所有内容被记录下来进行回滚。

答案 1 :(得分:0)

看起来你正在使用tempdb明确地使用你放在那里的数据。是否有理由将tempdb用作您自己的数据库?

tempdb增长的原因是因为你明确地将数据放在那里。 420k行听起来不是很重,但最好将它保存在你自己的用户数据库中。

建议更改您的业务逻辑,以便从[tempDB].[dbo].[targettable]转移到您自己的用户数据库上。

答案 2 :(得分:0)

如果没有明确的加入,这是笛卡尔积吗?