欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » SQLServer教程 » 正文

热门阅读

浅谈SQL语句优化的几种方法(一)

创建时间:2011年09月01日 22:14  阅读次数:(12442)
分享到:
SQL语句优化是每个程序员与DBA必不可少的一门课程,本章就跟随小编一起来探讨一下SQL语句优化应该注意的几个方面吧。

1,控制连接表中记录数量。
我们在多表查询的时候,用的最多的恐怕就是内连接(inner join)与左右连接了(left join 与 right join)了。但我们改一下SQL的执行顺序,以减少连接表中的记录数,则可以提高查询的效率.如下语句:
select * from t1 left join t2 where t1.id=t2.id and t1.id >800 and t2.id<500

如果我们用子查询代替连接表,以减少连接表中的记录数,再来匹配,查询效率是否能提高了?
sql改写如下:
select * from (select * from t1 where t1.id >800) a left join (select * from t2 where t2.id<500) b on a.id=b.id.

这样写的语句虽然复杂,但确实可以提高查询效率。但是,建议仅在数据量非常大的情况下用该方法,因为数据量小的情况下效果会很不明显,而且影响语句的可读性。

2,控制查询中行与列的数量

2.1 减少结查集中的行数。
(1) 使用where子句。
可以在select语句中使用where条件筛选出我们需要的记录,再用结果集做进一步的查询,第一点其实就是该方法的具体应用。

(2) 使用top关键字。
如果我们确定查询记录的数量,那么可以使用top来限制结果集中的记录数量,而不是把所有结果查询出来再在前台程序中取确定的记录数,比如,我们要查询最新的100个消费记录,可以使用如下select语句:
select top 100 * from consume order by createdate desc

如查不用top关键字,则select语句如下:
select * from consume order by createdate desc

显示,前者将大大提高查询的速度。

(3)适当的使用distinct关键字
当select语句只返回一列数据时,而且结果集中存在很多重复数据的时候,可以使用distinct关键字来减少结果集中的记录数量,如下:
select distinct cardon from consume

注意:并不是所有情况都适合使用distinct关键字的,如果使用不当,反而会降低查询效率.具体原因请看本站浅谈SQL语句优化的几种方法(二)

2.2 减少结果集中的列的数量
应该尽量避免在select语句使用*来表示要查询的列,因这会返回表中所有的列。而且如果在视图中使用*,那么在表结构变化时,视图的列还会错位。我们应该明确列出要查询的列,避免结果集中不出现大量不需要的列。特别是text,varchar(max)等大数据量的列,能不用到,就一定不在select的列中出现。
如下语句:
select * from consume

应该改为:
select id,name,model,unit from consume

注意,特别是在多表的联合查询中,该方法更现重要,使用*不仅会增加结果集的数据量,还有可能会造成结果集中有重复列的的错误,所以特别不推荐在select中使用*号。匭筟1\T`O薔蛜0R購虘  ^g鵞`O哊銐孴f[`NA
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论2条
  • #1楼  评论人:笨笨猪  评论时间:2015-8-18 15:57:54
  • 面试,就问懂不懂数据库优化,请问怎么样才算是懂,只有遇到了才能去优化
  • #2楼  评论人:HelloKitty  评论时间:2015-8-18 15:59:15
  • 有几个人 能做到真正的优化,而且要具体情况具体分析
发表评论:
留言人:
内  容:
请输入问题 47+4=? 的结果(结果是:51)
结  果: