使用SELECT INTO #TEMP表时,结果是否记录到事务日志中?

时间:2018-07-19 20:36:09

标签: sql-server join logging transactions sql-update

通过将UPDATE和JOIN分为两个查询,我已经能够使用JOINS优化大表UPDATES。我知道已记录UPDATES,但是通过创建一个临时表,我加入了仅包含我感兴趣的更新记录的临时表,大大减少了UPDATE时间。

但是,我相信该策略成功的最大原因是因为以下命令:SELECT INTO #TempTable未记录在日志文件中,并且被视为大容量副本。我不关心脏读,因为这是Datawarehouse类型的情况。有人知道SELECT INTO Table或SELECT INTO #TempTable是否与数据一起存储在事务日志中?

1 个答案:

答案 0 :(得分:1)

  

我相信该策略成功的最大原因是   因为未记录和处理以下命令:SELECT INTO #TempTable   作为日志文件中的大容量副本。

首先,在SQL Server中没有未记录的用户数据库操作(唯一的未记录操作是版本存储,并且在tempdb中可以是最小的工作文件)。

还记录了

Bulk操作,但是如果满足某些要求,可以在minimally loggedsimple恢复模型中以及bulk logged操作中将它们记录为bulk已完全记录在full recovery model下。

从这个意义上讲,SELECT INTO临时表就像“大容量”,它是minimally loggedtempdb的恢复模型始终是SIMPLE

SIMPLEBULK LOGGED恢复模型SELECT INTO中的用户数据库中,也最少记录了日志。

The Data Loading Performance Guide中,您可以找到最低记录条件,并且在这里:Understanding Logging and Recovery in SQL Server by Paul S. Randal阅读有关在SQL Server中进行记录的更多信息。

这是致力于登录tempdb的文章:Understanding Logging in Tempdb