Я работаю над проектом ETL, активно заполняя таблицы данными.Иногда, если чего-то не хватает, целый блок изменений данных должен быть отменен, поэтому я использую транзакцию.Когда что-то идет не так, применяется откат, если нет, ОБНОВЛЕНИЕ СТАТИСТИКИ может помочь эффективности.
Так что мой вопрос в том, что было бы более эффективно, ОБНОВИТЬ СТАТИСТИКУ внутри транзакции или после 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
Я пробовал оба с практически одинаковыми результатами, но с большим количеством данных или большим количеством откатов могут быть разные.