针对数据库开发人员的性能调优小提示


 
性能调优并不是一件简单的事情,根本没有任何万能方案,但是你可以使用一些基本原则去实施.

在一般的认为中,性能调优是DBA的职责.但是实际上,DBA是没有时间去仔细检查对存储过程所做的每个变更.所以学会一些基本的调优或许可以帮你省去重写代码的时间.
这里我列出了15个事项,开发人员在写代码的时候应该理所当然的考虑这些事项以达到性能调优的目的.这些是SQLServer性能上的一些小技巧-比较简单就能实施,并且实施之后通常效果都很明显.另外说明下,完成了以下的事项并不一定意味着会降低很多负载,但是至少数据库不会变得更慢.

1.在每个表上都创建主键并且设置其为聚簇索引,除非你能选择一个更好的设计方法.
2.在外键的栏位上创建索引.如果你确定该栏位里的值都是唯一的,那么需要加上唯一标示.
3.不要在其余的栏位上创建索引.
4.极个别情况除外,建议在TSQL中指定物件的所有者.比如使用dbo.sysdatabases而不是sysdatabases.
5.在每个存储过程的开始都加上Set Nocount On,在结束时使用Set Nocount Off.
6. 需要仔细考量锁的级别.如果不是银行系统,那么是否允许接受脏读?如果接受脏读,你可以使用NOLOCK提示,更简单的办法是在存储过程的开始使用SET TRANSACTION ISOLATION LEVEL READ UNCOMMITED,在结束的时候重置为READ COMMITED.
7.可能你已经听过几千遍了,但是还是需要提醒下,只返回需要的数据(行和列).
8.在适当的时候使用事务,但是在事务过程中允许零用户交互.我一般都会尽量的将事务放置在存储过程中.
9.尽量避免使用临时表,但是如果在只能使用临时表的情况下,显式的使用Create Table #temp命令创建.
10.避免使用NOT IN.使用Left Outer Join替代,尽管使用NOT IN会更有可读性
11.如果使用到动态sql(执行一些拼接起来的sql),请使用命名参数以及sp_executesql(而不是EXEC),这样能保证有机会重用执行计划.尽管大部分情况下存储过程是正确的选择方案,但是也需要注意不要错误的使用它们.
12.养成在开始变更之前和结束变更之后都分析代码的习惯.当你发现在修改代码之后,CPU成本或者读写成本有10~15%的提升,那么就意味你需要检查你的代码.
13.尽可能找到一种方法降低对服务器的多次请求.一次性返回大量结果集就是其中一种方法.
14.避免使用索引或者Join提示
15. 当你在编写代码时,请仅仅监控来自于你机器的语句,然后通过应用程序完整的运行一次这些语句.需要关注的是读写的数量,以及对服务器请求的次数.关注所有 的异常的现象.对不再使用的存储过程或者对存储过程的重复调用的现象并不少见.让DBA检查这些监控结果会给他们留下比较深刻的印象.

如果你采取了上述的15个步骤,你就取得了较好的开始.
posted @ 2012-08-25 10:02  丁晨  阅读(242)  评论(0编辑  收藏  举报