如何书写高效的SQL语句

如何书写高效的SQL语句

ID:37755496

大小:23.08 KB

页数:9页

时间:2019-05-30

如何书写高效的SQL语句_第1页
如何书写高效的SQL语句_第2页
如何书写高效的SQL语句_第3页
如何书写高效的SQL语句_第4页
如何书写高效的SQL语句_第5页
资源描述:

《如何书写高效的SQL语句》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、如何书写高效的SQL语句在应用开发中,书写SQL语句是最基本的工作,但我们往往在这方面侧重的是功能的实现,很容易把效率问题给忽略了,在随着系统数据的不断增加,可能有些低效的SQL语句会让客户感觉系统反映缓慢,甚至还有可能会因长时间执行不出结果而报超时或其它系统错误,所以我们要养成一个良好的编码习惯,不仅要实现其功能,而且要尽可能的提高效率。下面内容是在网络上收集的一些比较典型实用的优化点,以及在工作中用到的典型样例,供大家参考学习。1、注意UNion和UNionall的区别。它们两都可以把相同结果集

2、并在一起,但UNIONall的效率稍好一些,在就是如果A并上B有重复记录,unionall可以把重复数据distict掉2、注意使用DISTINCT,在没有必要时不要用,它同UNION一样会使查询变慢。重复的记录在查询里是没有问题的3、查询时不要返回不需要的行、列,即最好不要用select*fromtablename,这样会把所有的字段都解析出来.4、如果使用了IN或者OR等时发现查询没有走索引,使用显示申明指定索引:SELECT*FROMPersonMember(INDEX=IX_Title)WH

3、EREprocessidIN(‘男’,‘女’)5、在SQL2000以前,一般不要用如下的字句:"ISNULL","<>","!=","!>","!<","NOT","NOTEXISTS","NOTIN","NOTLIKE",and"LIKE'%500'",因为他们不走索引全是表扫描。也不要在WHere字句中的列名加函数,如Convert,substring等,如果必须用函数的时候,创建计算列再创建索引来替代.还可以变通写法:WHERESUBSTRING(firstname,1,1)='m'改为WHE

4、REfirstnamelike'm%'(索引扫描),一定要将函数和列名分开。并且索引不能建得太多和太大。NOTIN会多次扫描表,使用EXISTS、NOTEXISTS,IN,LEFTOUTERJOIN来替代,特别是左连接,而Exists比IN更快,最慢的是NOT操作.如果列的值含有空,以前它的索引不起作用,现在2000的优化器能够处理了。相同的是ISNULL,“NOT","NOTEXISTS","NOTIN"能优化她,而”<>”等还是不能优化,用不到索引。6、将需要查询的结果预先计算好放在表中,查询的

5、时候再SELECT。这在SQL7.0以前是最重要的手段。例如医院的住院费计算。7、MIN()和MAX()能使用到合适的索引8、数据库有一个原则是代码离数据越近越好,所以优先选择Default,依次为Rules,Triggers,Constraint(约束如外健主健CheckUNIQUE……,数据类型的最大长度等等都是约束),Procedure.这样不仅维护工作小,编写程序质量高,并且执行的速度快。9、如果要插入大的二进制值到Image列,使用存储过程,千万不要用内嵌INsert来插入(不知JAVA是

6、否)。因为这样应用程序首先将二进制值转换成字符串(尺寸是它的两倍),服务器受到字符后又将他转换成二进制值.存储过程就没有这些动作:方法:Createprocedurep_insertasinsertintotable(Fimage)values(@image),在前台调用这个存储过程传入二进制参数,这样处理速度明显改善。10、Between在某些时候比IN速度更快,Between能够更快地根据索引找到范围。用查询优化器可见到差别。select*fromchineseresumewheretitlei

7、n('男','女')Select*fromchineseresumewherebetween'男'and'女'是一样的。由于in会在比较多次,所以有时会慢些。11、在必要是对全局或者局部临时表创建索引,有时能够提高速度,但不是一定会这样,因为索引也耗费大量的资源。他的创建同是实际表一样。12、不要建没有作用的事物例如产生报表时,浪费资源。只有在必要使用事物时使用它。13、用OR的字句可以分解成多个查询,并且通过UNION连接多个查询。他们的速度只同是否使用索引有关,如果查询需要用到联合索引,用UNI

8、ONall执行的效率更高.多个OR的字句没有用到索引,改写成UNION的形式再试图与索引匹配。一个关键的问题是否用到索引。14、尽量少用视图,它的效率低。对视图操作比直接对表操作慢,可以用storedprocedure来代替她。特别的是不要用视图嵌套,嵌套视图增加了寻找原始资料的难度。我们看视图的本质:它是存放在服务器上的被优化好了的已经产生了查询规划的SQL。对单个表检索数据时,不要使用指向多个表的视图,直接从表检索或者仅仅包含这个表的视图上读,否则增加了不必要的开

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

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

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