【问题标题】:When is better to call UPDATE STATISTICS? before or after a COMMIT TRANS何时调用 UPDATE STATISTICS 更好?在 COMMIT TRANS 之前或之后
【发布时间】: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


【解决方案1】:

我将使用第二个。

如果您将它们放在 try 块中,事务将在引发错误时回滚。

我相信您仍然需要“更新统计信息”来提高效率,即使您的事务应用了回滚。如果是这样,最好在事务提交后保留“更新统计信息”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-29
    • 2023-04-08
    • 2017-04-20
    • 1970-01-01
    相关资源
    最近更新 更多