存储过程、触发器、函数代码优化
3.1.在触发器的开始处加入行数检验
–注意@@rowcount语句的位置
3.2.没有必要的行信息反馈
Set nocount on
3.3.尽早检查执行条件
–检查触发器触发条件
–检查进一步处理的前提条件
3.4.在进行相关表的更新(新增/修改/删除)时应进行资料存在性判断
–如果存在性判断过于复杂,也可以考虑在目的表建立约束或触发器维护
3.5.能够合并的相关表更新(新增/修改/删除)尽量合并,减少更新次数
–使用临时表存储中间结果,在处理完临时表结果后再更新实表
3.6.将事务时间控制到最短,事务应尽可能串行执行减少死锁
–在最靠近对实表发出DML语句出开始事务,在对实表发出DML语句后立即提交或回滚事务
3.7.变量重用
–过多的变量定义会轻微降低性能
3.8.临时表的使用
–集中创建临时表,显式删除临时表
3.9.游标的使用
3.10.多行处理
–通过分组技术
–借助临时表
–借助游标
3.11.视图与函数的选择
–将能够改造成视图的函数改造成视图或添加相应处理多行的视图
3.12.使用表变量
3.13.将复杂的SQL改成使用表变量或临时表分步处理
3.14.尽量少用嵌套触发器
3.15.使用sp_executesql代替exec
3.16.如果存储过程仅返回单个值,使用output参数比返回结果集要快
3.17.通常情况下使用连接比使用子查询快
3.18.尽量避免反复访问同一张或几张表,尤其是数据量较大的表,可以考虑先根据条件提取数据到临时表中,然后再做连接。
3.1触发器基本知识
3.1.1.SQL Server2005两种触发器选项
–DML触发器
–DDL触发器(New):审计及规范数据库操作
3.1.2.Instead of触发器和After触发器比较
3.1.3.inserted和deleted表
3.1.4.update()的使用
3.2 SQL Server 2005游标
4种服务器游标类型:
–静态游标:游标打开时建立在tempdb中,打开后数据库中任何变化不会体现在游标中(除非关闭后重新打开)。静态游标是只读的。使用“Static”修饰。例如:
·静态游标将不会显示其打开以后再数据库中新插入的行,即使它们符合游标SELECT查询条件;
·静态游标仍会显示在游标打开以后删除的行;
·静态游标将仍然显示被修改行的原始数据。
–动态游标:当滚动游标时,反映结果集中所做的所有更改。使用“Dynamic”修饰。
–只进游标:不支持滚动,只支持从头到尾顺序提取。对所有影响结果集中行的insert、update、delete语句,其效果在这些行中提取时是可见的。但是,在行提取后对行的所做的修改对游标是不可见的。使用“Forward_Only”修饰。
–键集驱动游标:由一套被称为键集的唯一标识符控制。对非键集列中的数据值所做的更改,在用户滚动时是可见的。在游标外对数据库所做的插入在游标内是不可见的。使用“Keyset”修饰。V蟢L垊v抍
T抍
T颯錘v^Rv^R抍
TT剉NL垝c
Tz槒^
NI{嶯MRL垹R1
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf】
打赏
扫码打赏,您说多少就多少