【发布时间】:2019-04-10 21:03:44
【问题描述】:
我正在处理一个 ETL 项目,正在积极地用数据填充表格。有时,如果缺少某些内容,则必须撤消整个数据修改块,因此我正在使用事务。当出现问题时,应用回滚,如果没有,UPDATE STATISTICS 可以提高效率。
所以我的问题是,在 TRANSACTION 中还是在 COMMIT 之后更新统计信息更有效?
目前工作正常:
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
我已经尝试了两者,结果几乎相同,但更多数据或更多回滚可能会有所不同。
【问题讨论】:
-
当您的代码正常工作时,您在错误的平台上。你需要的是代码审查。
标签: tsql transactions