15、在存储过程中使用下列非常好的实践
(1)不要使用SP_xxx作为命名约定,它会导致额外的搜索,增加I/O(因为系统存储过程的名字就是以SP_开头的),同时这么做还会增加与系统存储过程名称冲突的几率;
(2)将Nocount设置为On避免额外的网络开销;
(3)当索引结构发生变化时,在EXECUTE语句中(第一次)使用WITH RECOMPILE子句,以便存储过程可以利用最新创建的索引;
(4)使用默认的参数值更易于调试。
16、在触发器中使用下列非常好的实践
(1)最好不要使用触发器,触发一个触发器,执行一个触发器事件本身就是一个耗费资源的过程;
(2)如果能够使用约束实现的,尽量不要使用触发器;
(3)不要为不同的触发事件(Insert,Update和Delete)使用相同的触发器;
(4)不要在触发器中使用事务型代码。
17、在视图中使用下列非常好的实践
(1)为重新使用复杂的TSQL块使用视图,并开启索引视图;
(2)如果你不想让用户意外修改表结构,使用视图时加上SCHEMABINDING选项;
(3)如果只从单个表中检索数据,就不需要使用视图了,如果在这种情况下使用视图反倒会增加系统开销,一般视图会涉及多个表时才有用。
18、在事务中使用下列非常好的实践
(1)SQL Server 2005之前,在BEGIN TRANSACTION之后,每个子查询修改语句时,必须检查@@ERROR的值,如果值不等于0,那么最后的语句可能会导致一个错误,如果发生任何错误,事务必须回滚。从SQL Server 2005开始,Try..Catch..代码块可以处理TSQL中的事务,因此在事务型代码中最好加上Try…Catch…;
(2)避免使用嵌套事务,使用@@TRANCOUNT变量检查事务是否需要启动(为了避免嵌套事务);
(3)尽可能晚启动事务,提交和回滚事务要尽可能快,以减少资源锁定时间。
要完全列举非常好的实践不是本文的初衷,当你了解了这些技巧后就应该拿来使用,否则了解了也没有价值。此外,你还需要评审和监视数据访问代码是否遵循下列标准和非常好的实践。
如何分析和识别你的TSQL中改进的范围?
理想情况下,大家都想预防疾病,而不是等病发了去治疗。但实际上这个愿望根本无法实现,即使你的团队成员全都是专家级人物,我也知道你有进行评审,但代码仍然一团糟,因此需要知道如何治疗疾病一样重要。
首先需要知道如何诊断性能问题,诊断就得分析TSQL,找出瓶颈,然后重构,要找出瓶颈就得先学会分析执行计划。