欢迎来到天天文库
浏览记录
ID:36877724
大小:462.50 KB
页数:20页
时间:2019-05-10
《《sql经验总结》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Sql效率经验总结SQL开发观点对于客户-服务器结构的数据库应用程序来说,减少网络传输的数据量直接影响到应用程序的性能。在编程时应注意尽量减少网络流量,避免不必要的数据传输。另外,数据库的加锁机制和事务处理也会直接影响到一个应用程序性能的好坏。在这里提供一些建议供大家参考。合理使用存储过程将完成一个功能的SQL语句写成存储过程,不但可以减少网络流量,而且由于存储过程是预编译的,能进一步提高响应速度。WHERE子句在SELECT语句中通过使用WHERE子句来减少返回的记录数。去掉不需要的字段避免使用SELECT*FROM语句,要使用SELECTF1,F2FROM语句,去掉不需要的
2、字段。避免显式或隐含的类型转换避免显式或隐含的类型转换,如在WHERE子句中Numeric型和Int型的列的比较。SQLSERVER在SELECT语句中,如果表中的大部分记录符合查询条件,尽管WHERE子句中的字段上有索引,但SQLSERVER不会使用索引,而是顺序扫描该表。复合索引对于复合索引要注意,例如在建立复合索引时列的顺序是F1,F2,F3,则在WHERE或ORDERBY子句中这些字段出现的顺序要与建立索引时的字段顺序一致,可以是F1或F1,F2或F1,F2,F3。否则SQLSERVER不会用到该索引。尽快地提交事务SQLSERVER为了支持事务一致性,对共享的资源上保
3、留锁直至事务被提交。其他要使用相同资源的用户必须要等待。如果一个事务变长的话,锁的队列以及等待锁的用户队列将会变长,这最终导致系统吞吐量的降低。长的事务还增加了出现死锁的可能性。具体包括在事务中不能包含用户交互,避免更新同一数据两次,大批量的数据更新放在事物的后面部分等。尽量减少对列的四则运算在WHERE子句中,尽量减少对列的四则运算。例如:selectcolAfromtableAwheresalary*12>12000应该用如下语句代替:selectcolAfromtableAwheresalary>1000在WHERE子句中,尽量用>=代替>。例如:selectF1from
4、Table1wherea>3(其中a为int型)在该例中,a列上是有索引的,SQLSERVER扫描索引页,直到a=3的页,然后顺序扫描,直到a=4,如果a=3的记录很多,会有很多无效的I/O操作。应该用如下语句代替:electF1fromTable1wherea>=4避免在IFEXISTS和IN操作符中使用NOT因为不使用NOT,SQLSERVER在得到满足条件的第一条记录后返回,而使用NOT操作符,SQLSERVER可能要扫描整个表。例如:ifnotexists(select*fromtableAwhere…)beginstatementgrouponeendelsebegi
5、nstatementgrouptwoend应该用如下语句代替:ifexists(select*fromtableAwhere…)beginstatementgrouptwoendelsebeginstatementgrouponeendIFEXISTS语句在判断有无符合条件的记录时不要用SELECTCOUNT(*)语句,而是要用IFEXISTS语句:例如:declare@varintselect@var=count(*)fromemployeewhereemp_id=123if@var!=0...moresqlcode...应该用如下语句代替:ifexists(select1f
6、romemployeewhereemp_id=123)begin...moresqlcode...endWHERE子句中的等于列(1)在WHERE子句中如果对于某列有等于的条件,则在SELECT子句中不应该出现该列,例如:selectcust_number,cust_namefromcustomerwherecust_number=612应该用如下语句代替:selectcust_namefromcustomerwherecust_number=612WHERE子句中的等于列(2)在WHERE子句中如果对于某列有等于的条件,则在ORDERBY子句中不应该出现该列,例如:selec
7、tcust_number,cust_name,cust_stfromcustomerwherecust_st=‘L’orderbycust_st,cust_name应该用如下语句代替:selectcust_number,cust_namefromcustomerwherecust_st=‘L’orderbycust_number同一个列的多个OR条件在WHERE子句中,对于同一个列的多个OR条件,用IN操作符来代替,例如:selectcust_number,cust_name,cust_st
此文档下载收益归作者所有