请教一个优化的思路问题
有过程:
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;
存储过程的优化还是多关注表结构设计,索引优化上面来。。。
------解决方案--------------------加在最外面最简单,但锁定的时间最长
------解决方案--------------------事务用于数据一致性了,有些没有必要加事务的
如何加要看楼主数据处理逻辑了
------解决方案--------------------预先清理检测数据
再一次性导入处理