旅行社数据库系统 下载本文

内蒙古科技大学课程设计说明书

?

使用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