sql语句优化技巧2011-csdn

sql语句优化技巧2011-csdn

ID:34726261

大小:71.18 KB

页数:5页

时间:2019-03-10

sql语句优化技巧2011-csdn_第1页
sql语句优化技巧2011-csdn_第2页
sql语句优化技巧2011-csdn_第3页
sql语句优化技巧2011-csdn_第4页
sql语句优化技巧2011-csdn_第5页
资源描述:

《sql语句优化技巧2011-csdn》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、1、应用程序中,保证在实现功能的基础上,尽量减少对数据库的访问次数;通过搜索参数,尽量减少对表的访问行数,最小化结果集,从而减轻网络负担;能够分开的操作尽量分开处理,提高每次的响应速度;在数据窗口使用SQL时,尽量把使用的索引放在选择的首列;算法的结构尽量简单;在查询时,不要过多地使用通配符如SELECT*FROMT1语句,要用到几列就选择几列如:SELECTCOL1,COL2FROMT1;在可能的情况下尽量限制尽量结果集行数如:SELECTTOP300COL1,COL2,COL3FROMT1,

2、因为某些情况下用户是不需要那么多的数据的。不要在应用中使用数据库游标,游标是非常有用的工具,但比使用常规的、面向集的SQL语句需要更大的开销;按照特定顺序提取数据的查找。 2、避免使用不兼容的数据类型。例如float和int、char和varchar、binary和varbinary是不兼容的。数据类型的不兼容可能使优化器无法执行一些本来可以进行的优化操作。例如: SELECTnameFROMemployeeWHEREsalary>60000 在这条语句中,如salary字段是money型的,则

3、优化器很难对其进行优化,因为60000是个整型数。我们应当在编程时将整型转化成为钱币型,而不要等到运行时转化。 3、尽量避免在WHERE子句中对字段进行函数或表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如: SELECT*FROMT1WHEREF1/2=100应改为: SELECT*FROMT1WHEREF1=100*2SELECT*FROMRECORDWHERESUBSTRING(CARD_NO,1,4)=’5378’应改为:SELECT*FROMRECORDWHERECARD_NOL

4、IKE‘5378%’SELECTmember_number,first_name,last_nameFROMmembersWHEREDATEDIFF(yy,datofbirth,GETDATE())>21应改为:SELECTmember_number,first_name,last_nameFROMmembersWHEREdateofbirth

5、4、避免使用!=或<>、ISNULL或ISNOTNULL、IN,NOTIN等这样的操作符,因为这会使系统无法使用索引,而只能直接搜索表中的数据。例如: SELECTidFROMemployeeWHEREid!='B%' 优化器将无法通过索引来确定将要命中的行数,因此需要搜索该表的所有行。 5、尽量使用数字型字段,一部分开发人员和数据库管理人员喜欢把包含数值信息的字段设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接回逐个比较字符串中每一个字符,而对于数字型而言

6、只需要比较一次就够了。6、合理使用EXISTS,NOTEXISTS子句。如下所示:1.SELECTSUM(T1.C1)FROMT1WHERE((SELECTCOUNT(*)FROMT2WHERET2.C2=T1.C2>0)2.SELECTSUM(T1.C1)FROMT1WHEREEXISTS( SELECT*FROMT2WHERET2.C2=T1.C2)两者产生相同的结果,但是后者的效率显然要高于前者。因为后者不会产生大量锁定的表扫描或是索引扫描。如果你想校验表里是否存在某条纪录,不要用coun

7、t(*)那样效率很低,而且浪费服务器资源。可以用EXISTS代替。如:IF(SELECTCOUNT(*)FROMtable_nameWHEREcolumn_name='xxx')可以写成:IFEXISTS(SELECT*FROMtable_nameWHEREcolumn_name='xxx')经常需要写一个T_SQL语句比较一个父结果集和子结果集,从而找到是否存在在父结果集中有而在子结果集中没有的记录,如:1.SELECTa.hdr_keyFROMhdr_tbla----tbla表示tbl用别名

8、a代替WHERENOTEXISTS(SELECT*FROMdtl_tblbWHEREa.hdr_key=b.hdr_key) 2.SELECTa.hdr_keyFROMhdr_tblaLEFTJOINdtl_tblbONa.hdr_key=b.hdr_keyWHEREb.hdr_keyISNULL 3.SELECThdr_keyFROMhdr_tblWHEREhdr_keyNOTIN(SELECThdr_keyFROMdtl_tbl)  三种写法都可以得到同样正确的结果,但是效率依次降低。7、尽

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。