Tsql 什么时候调用updatestatistics更好?在提交事务之前或之后

Tsql 什么时候调用updatestatistics更好?在提交事务之前或之后,tsql,transactions,Tsql,Transactions,我正在从事一个ETL项目,积极地用数据填充表。有时,如果缺少某些内容,则必须撤消整个数据修改块,因此我使用的是事务。当出现问题时,应用回滚,否则,更新统计数据可能有助于提高效率 所以我的问题是,在事务内部还是在提交之后更新统计数据更有效 目前工作情况如下: BEGIN TRY BEGIN TRAN UPDATE stuffs SET ... INSERT things VALUES(... UPDATE STATISTICS stuffs UPDATE

我正在从事一个ETL项目,积极地用数据填充表。有时,如果缺少某些内容,则必须撤消整个数据修改块,因此我使用的是事务。当出现问题时,应用回滚,否则,更新统计数据可能有助于提高效率

所以我的问题是,在事务内部还是在提交之后更新统计数据更有效

目前工作情况如下:

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

我尝试了这两种方法,结果几乎相同,但如果有更多的数据或更多的回滚,结果可能会有所不同。

我将使用第二种方法

如果将事务放入try块,则当事务引发错误时,事务将回滚


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

我将使用第二个

如果将事务放入try块,则当事务引发错误时,事务将回滚


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

当您的代码运行时,您处于错误的平台。你需要的是代码检查。当你的代码工作时,你在错误的平台上。您需要的是代码审查。