首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

请问一个优化的思路有关问题

2014-01-19 
请教一个优化的思路问题有过程:usp_mainusp_a usp_a1 usp_a2usp_b usp_b1usp_c...这些过程是对一系列数据

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

热点排行