我正在从事ETL项目,正在积极地用数据填充表格。有时,如果缺少某些内容,则必须撤消整个数据修改块,因此我正在使用事务。当出现问题时,将应用回滚,如果没有,则更新统计信息可以帮助提高效率。
所以我的问题是,在TRANSACTION内或COMMIT之后更新STATISTICS会更有效吗?
目前可以正常运行:
BEGIN TRY
BEGIN TRAN
UPDATE stuffs SET ...
INSERT things VALUES(...
UPDATE STATISTICS stuffs
UPDATE STATISTICS things
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0 ROLLBACK TRAN
RAISERROR( ... -- RAISERROR prevents from executing past this point
END CATCH
IF @@TRANCOUNT > 0 COMMIT TRAN
但这也许更好
BEGIN TRY
BEGIN TRAN
UPDATE stuffs SET ...
INSERT things VALUES(...
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0 ROLLBACK TRAN
RAISERROR( ... -- RAISERROR prevents from executing past this point
END CATCH
IF @@TRANCOUNT > 0 COMMIT TRAN
UPDATE STATISTICS stuffs
UPDATE STATISTICS things
我都尝试了几乎相同的结果,但是更多的数据或更多的回滚可能会有所不同。
答案 0 :(得分:0)
我将使用第二个。
如果将错误放在try块中,则在引发错误时,事务将回滚。
我相信即使回滚适用于您的交易,您仍然需要“更新统计信息”来提高效率。如果是这样,最好在事务提交后保留“更新统计信息”。