NC31开发环境培训.ppt_第1页
NC31开发环境培训.ppt_第2页
NC31开发环境培训.ppt_第3页
NC31开发环境培训.ppt_第4页
NC31开发环境培训.ppt_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Sql效率经验总结,SQL开发观点,对于客户-服务器结构的数据库应用程序来说,减少网络传输的数据量直接影响到应用程序的性能。在编程时应注意尽量减少网络流量,避免不必要的数据传输。另外,数据库的加锁机制和事务处理也会直接影响到一个应用程序性能的好坏。在这里提供一些建议供大家参考。,合理使用存储过程,将完成一个功能的SQL语句写成存储过程,不但可以减少网络流量,而且由于存储过程是预编译的,能进一步提高响应速度。,WHERE子句,在SELECT语句中通过使用WHERE子句来减少返回的记录数。,去掉不需要的字段,避免使用SELECT*FROM语句,要使用SELECTF1,F2FROM语句,去掉不需要的字段。,避免显式或隐含的类型转换,避免显式或隐含的类型转换,如在WHERE子句中Numeric型和Int型的列的比较。,SQLSERVER,在SELECT语句中,如果表中的大部分记录符合查询条件,尽管WHERE子句中的字段上有索引,但SQLSERVER不会使用索引,而是顺序扫描该表。,复合索引,对于复合索引要注意,例如在建立复合索引时列的顺序是F1,F2,F3,则在WHERE或ORDERBY子句中这些字段出现的顺序要与建立索引时的字段顺序一致,可以是F1或F1,F2或F1,F2,F3。否则SQLSERVER不会用到该索引。,尽快地提交事务,SQLSERVER为了支持事务一致性,对共享的资源上保留锁直至事务被提交。其他要使用相同资源的用户必须要等待。如果一个事务变长的话,锁的队列以及等待锁的用户队列将会变长,这最终导致系统吞吐量的降低。长的事务还增加了出现死锁的可能性。具体包括在事务中不能包含用户交互,避免更新同一数据两次,大批量的数据更新放在事物的后面部分等。,尽量减少对列的四则运算,在WHERE子句中,尽量减少对列的四则运算。例如:selectcolAfromtableAwheresalary*1212000应该用如下语句代替:selectcolAfromtableAwheresalary1000在WHERE子句中,尽量用=代替。例如:selectF1fromTable1wherea3(其中a为int型)在该例中,a列上是有索引的,SQLSERVER扫描索引页,直到a=3的页,然后顺序扫描,直到a=4,如果a=3的记录很多,会有很多无效的I/O操作。应该用如下语句代替:electF1fromTable1wherea=4,避免在IFEXISTS和IN操作符中使用NOT,因为不使用NOT,SQLSERVER在得到满足条件的第一条记录后返回,而使用NOT操作符,SQLSERVER可能要扫描整个表。例如:ifnotexists(select*fromtableAwhere)beginstatementgrouponeendelsebeginstatementgrouptwoend应该用如下语句代替:ifexists(select*fromtableAwhere)beginstatementgrouptwoendelsebeginstatementgrouponeend,IFEXISTS语句,在判断有无符合条件的记录时不要用SELECTCOUNT(*)语句,而是要用IFEXISTS语句:例如:declarevarintselectvar=count(*)fromemployeewhereemp_id=123ifvar!=0.moresqlcode.应该用如下语句代替:ifexists(select1fromemployeewhereemp_id=123)begin.moresqlcode.end,WHERE子句中的等于列(1),在WHERE子句中如果对于某列有等于的条件,则在SELECT子句中不应该出现该列,例如:selectcust_number,cust_namefromcustomerwherecust_number=612应该用如下语句代替:selectcust_namefromcustomerwherecust_number=612,WHERE子句中的等于列(2),在WHERE子句中如果对于某列有等于的条件,则在ORDERBY子句中不应该出现该列,例如:selectcust_number,cust_name,cust_stfromcustomerwherecust_st=Lorderbycust_st,cust_name应该用如下语句代替:selectcust_number,cust_namefromcustomerwherecust_st=Lorderbycust_number,同一个列的多个OR条件,在WHERE子句中,对于同一个列的多个OR条件,用IN操作符来代替,例如:selectcust_number,cust_name,cust_stfromcustomerwherecust_st=Lorcust_st=Aorcust_st=Iorderbycust_st,cust_number应该为:selectcust_number,cust_name,cust_stfromcustomerwherecust_stin(L,A,I)orderbycust_st,cust_number,求最大值和最小值的列,对于要求最大值和最小值的列,如果在该列上有索引,则要分开用两个SQL语句来求,例如:selectmax(price),min(price)fromtitles(price上有索引)应该用如下语句代替:selectmax(price)fromtitlesselectmin(price)fromtitles,对于能用联结实现的功能,不要用子查询实现,例如:selectnamefromcustomerwherecustomer_idin(selectcustomer_idfromorderwheremoney1000)应该用如下语句代替:selectnamefromcustomerinnerjoinorderoncustomer.customer_id=order.customer_idwhereorder.money100,检查被更新的行数时,在检查被更新的行数时用rowcount,而不用selectcount(*).例如:selectcount(*)fromcustomerwherecust_st=1andcust_code=2updatecustomersetcust_discount=.15wherecust_st=1andcust_code=2应该用如下语句代替:updatecustomersetcust_discount=.15wherecust_st=1andcust_code=2selectupdate_count=rowcount,通配符”_”

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论