内蒙古科技大学课程设计说明书
?
使用EXISTS判断记录是否存在
存储过程
? ?
对于频繁调用的存储过程,考虑用SP_RECOMPILE重新编译 使用输出语句代替返回整个数据集,输出语句的执行效率会更加高
效
?
在存储过程的头部使用SET NOCOUNT ON, 通过@@ROWCOUNT来控制,
这样可以减少网络流量和避免潜在的问题, 而在结束时设置 SET NOCOUNT OFF
?
不使用SP_作为存储过程的名称,建议用USP_,这个会影响数据库
的执行时间
?
尽可能使用表变量而不使用临时表,表变量可以减少上锁和重新编
译的次数并且表变量不使用TEMPDB的空间,而是全部使用内存来处理数据
?
先在例程中创建临时表,最后再显式删除临时表。将 DDL 与 DML
语句混合使用有助于处理额外的重新编译活动
?
尽可能不要在流程控制语句中使用临时表,比如:IF .. ELSE,
WHILE
?
避免在事务中进行赋值和复杂计算
? 避免在GROUP BY中使用HAVING 语句
?
GROUP BY的语句要尽量简单,不要进行GROUP BY语句的嵌套,避
免在GROUP BY中包含多余的列
?
考虑在GROUP BY的列,进行ORDER BY排序,特别在多用户的环境
下.
45
内蒙古科技大学课程设计说明书
?
如果需要在一个包含JOIN的SELECT语句进行GROUP BY,请考虑
用子查询代替JOIN. 如果必须使用GROUP BY, GROUP BY 的应该列在同一张表
?
如果WHERE条件语句有多个AND条件,请确保至少有一个列有索引,
如果没有可以建立多列复合INDEX
?
对于SQL 无法执行自动优化的WHERE条件语句,可以通过HINTS
显示的制定INDEX来提高查询的效率
? 尽可能避免在WHERE条件语句中使用函数计算
在WHERE条件语句中,避免在函数中包列,如果无法避免,请考虑在
?
该列建立INDEX
? ? ? ?
在WHERE条件语句中,避免使用NOT
在WHERE条件语句中,推荐使用10位的日前函数 避免使用UNION,而是用UNION ALL
使用 SQL-92 标准连接句法,为了提高性能,应优先使用连接,然
后使用子查询或嵌套查询,表之间的连接使用INNER JOIN,LEFT JOIN 和RIGHT JOIN,不使用CROSS JOIN和多列表方式
?
多表关联避免超过5个,可以通过临时表(表变量),简化复杂的关
联
46
内蒙古科技大学课程设计说明书
参 考 文 献
1.《数据库原理及应用》施伯乐著 高等教育出版社
2.《SQL-server数据库应用设计案例汇编》 刘宇君 编著,中国铁道出版
3.《SQL-server 2013 从零开始学》编, 清华大学出版社
47
王英英 张少军 刘增杰 等 主
内蒙古科技大学课程设计说明书
致 谢
1.感谢帮助我指点程序的任课教师和答辩教师 2.感谢帮助我指点程序的同学.
48