通过将UPDATE和JOIN分为两个查询,我已经能够使用JOINS优化大表UPDATES。我知道已记录UPDATES,但是通过创建一个临时表,我加入了仅包含我感兴趣的更新记录的临时表,大大减少了UPDATE时间。
但是,我相信该策略成功的最大原因是因为以下命令:SELECT INTO #TempTable未记录在日志文件中,并且被视为大容量副本。我不关心脏读,因为这是Datawarehouse类型的情况。有人知道SELECT INTO Table或SELECT INTO #TempTable是否与数据一起存储在事务日志中?
答案 0 :(得分:1)
我相信该策略成功的最大原因是 因为未记录和处理以下命令:SELECT INTO #TempTable 作为日志文件中的大容量副本。
首先,在SQL Server中没有未记录的用户数据库操作(唯一的未记录操作是版本存储,并且在tempdb中可以是最小的工作文件)。
还记录了 Bulk
操作,但是如果满足某些要求,可以在minimally logged
和simple
恢复模型中以及bulk logged
操作中将它们记录为bulk
已完全记录在full recovery model
下。
从这个意义上讲,SELECT INTO
临时表就像“大容量”,它是minimally logged
,tempdb
的恢复模型始终是SIMPLE
。
在SIMPLE
或BULK 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