请教一个优化的思路问题
有过程:
usp_main
usp_a
usp_a1
usp_a2
usp_b
usp_b1
usp_c
...
这些过程是对一系列数据的处理,从导入TXT,然后整理数据。。。
由usp_main开始,然后逐个调用,sp中都未写事务
现在想优化一下整体性能,从加事务方面(先不谈其他方面)
那么问题在于,begin tran怎么加好?有什么讲究?
是只要加外面就好:
begin tran
usp_main
commit tran
还是修改每个过程:
alter proc usp_main
as
begin tran
....
commit tran
[解决办法]
如果之间没有什么特别的关联,比如说必须全部成功或者全部失败,并且持续时间长,可以分开多个事务,否则,一个事务也可以
[解决办法]
这样加比较好:
begin tran
usp_main
commit tran
[解决办法]
除了性能,最重要的是数据一致性,
[解决办法]
可以用这种方式来,加强错误处理:
begin try
begin tran
exec proc_t 1
--select '执行成功'
commit tran
end try
begin catch
--select '执行失败'
if @@trancount >0
rollback
end catch
[解决办法]
这样的好处是,你不需要修改每个存储过程。
只需要在调用的时候,写上begin tran 和错误捕获 begin try
[解决办法]
应该没什么帮助作用。
[解决办法]
begintrans可以写在程序端,捕获异常就rollback ,执行正常完毕就commit;
存储过程的优化还是多关注表结构设计,索引优化上面来。。。
[解决办法]
加在最外面最简单,但锁定的时间最长
[解决办法]
事务用于数据一致性了,有些没有必要加事务的
如何加要看楼主数据处理逻辑了
[解决办法]
预先清理检测数据
再一次性导入处理