T-SQL性能调优

  性能影响因素

1 SQLServer数据库本身存储、查询机制
2 数据库逻辑设计:表间关系设计,字段数据类型选择,索引设计
1) 多使用窄表;少使用多列的长数据表。
相悖之处:更新速度和查询速度相抵触;insert和update操作要求表中有尽量少的索引;而查询则要求多索引存在;所以在无法控制数据量的情况下,多使用有相互关系的窄表是不错的选择
 
2) 索引建立参考,索引列取决与相应列值的个数(value)
 value <= 3  不需索引
 20> value > 3  clustered Index
 5000> value >20 noclustered Index
 value > 5000 unique index
      
3) 数据类型需考虑兼容性、数值类型优先选择
 
3 查询设计
优化查询性能,关键是尽量减少访问表中行的数量,这取决于Where条件设计,构造查询条件时使用索引,可避免DB引擎进行全行扫描。对应用程序,则尽量减少网络I/O交互次数。
 
1) 尽量避免在Where子句中对字段进行函数或表达式操作(A*B、Substring()、UPPER()、LTRIM()等不要出现在WHERE子句中)
       2) 不建议使用临时表(有I/O操作),而代之以内嵌视图或子查询
       3) 使用视图,对经常使用的子查询,构建视图
4)操作符影响
尽量避免在Where子句中使用<>、IS Null(IS Not Null)、In、Not In;它们不能使用表的已有索引,会引起对表的全行扫描
使用Between And,由于使用IN
5) 定义和查询中少使用NULL
       6) 比较存在性查询,Exists 和 Not Exists性能好
       7) 事务&锁:使事务尽量小,使事务影响范围可控;显示事务控制,出错捕捉控制;
       8) 不建议使用游标,如有特殊case需使用,要谨慎;需征求DBA意见,告知可能的影响
       9) 发布存储过程中禁止使用Print语句(自身测试不限制,但要求测试完毕后把对应脚本删除)
       10) Select语句必须使用Nolock
       11) 存储中加Set nocount on
       12) 不推荐使用trigger
       13) 连接查询,尽量提供完整的连接条件,降低连接表数量,防止 Left Join全行扫描
14) 查询尽量要利用索引
 
脚本书写规范
1 任何数据对象的修改脚本,文件名中必须包含指定修改对象对应的server、database,同时文件中必须显示说明server、database,并包含对应的USE子句
2 禁止使用DROP语句
3 禁止使用“Select *”,任何DML操作,必须指定列名或给出别名
4 必要的缩近

5 任何有流程控制的,必须用BEGIN END语句块包括,即使是语句块中仅有一行操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值