SQLServer优化存储过程的七种⽅法
优化存储过程有很多种⽅法,下⾯介绍最常⽤的7种。
1.使⽤SET NOCOUNT ON选项
我们使⽤SELECT语句时,除了返回对应的结果集外,还会返回相应的影响⾏数。使⽤SET NOCOUNT ON后,除了数据集就不会返回额外的信息了,减⼩⽹络流量。
2.使⽤确定的Schema
在使⽤表,存储过程,函数等等时,最好加上确定的Schema。这样可以使SQL Server直接到对应⽬标,避免去计划缓存中搜索。⽽且搜索会导致编译锁定,最终影响性能。⽐如select * from dbo.TestTable⽐select * from TestTable要好。from TestTable会在当前Schema下搜索,如果没有,再去dbo下⾯搜索,影响性能。⽽且如果你的表是csdn.TestTable的话,那么select * from TestTable会直接报不到表的错误。所以写上具体的Schema也是⼀个好习惯。
3.⾃定义存储过程不要以sp_开头
因为以sp_开头的存储过程默认为系统存储过程,所以⾸先会去master库中,然后在当前数据库。建议使⽤USP_或者其他标识开头。
4.使⽤sp_executesql替代exec
原因在Inside Microsoft SQL Server 2005 T-SQL Programming书中的第四章Dynamic SQL⾥⾯有具体描述。这⾥只是简单说明⼀下:sp_executesql可以使⽤参数化,从⽽可以重⽤执⾏计划。exec就是纯拼SQL语句。
5.少使⽤游标
可以参考Inside Microsoft SQL Server 2005 T-SQL Programming书中的第三章Cursors⾥⾯有具体描述。总体来说,SQL是个集合语⾔,对于集合运算具有较⾼的性能,⽽Cursors是过程运算。⽐如对⼀个100万⾏的数据进⾏查询,游标需要读表100万次,⽽不使⽤游标只需要少量⼏次读取。
6.事务越短越好
SQL Server⽀持并发操作。如果事务过多过长,或是隔离级别过⾼,都会造成并发操作的阻塞,死锁。此时现象是查询极慢,同时cup占⽤率极低。
7.使⽤try-catch来处理错误异常
SQL Server 2005及以上版本提供对try-catch的⽀持,语法为:
begin try
----your code
end try
begin catch
--error dispose
end catch
⼀般情况可以将try-catch同事务结合在⼀起使⽤。
begin try
begin tran
--select
--update
-
-delete
--…………
commit
end try
begin catch
--if error
rollback
end catch
sql语句优化方式

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。