何时最好致电UPDATE STATISTICS?在提交交易之前或之后

时间:2019-04-10 21:03:44

标签: tsql transactions

我正在从事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

我都尝试了几乎相同的结果,但是更多的数据或更多的回滚可能会有所不同。

1 个答案:

答案 0 :(得分:0)

我将使用第二个。

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

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