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