当前位置:   article > 正文

SQL语句查询优化_sql查询优化

sql查询优化

在做涉及到数据库的项目开发时,经常会遇到对sql语句进行优化的情况,对于数据量少的项目可能美什么感觉,但是一旦数据量多了起来,就会感觉到sql优化之后的明显变化。以下是自己总结的一些sql优化的方案。仅供参考。

目录

一、创建索引

二、避免在索引上使用计算

三、使用预编译查询

四、调整Where 字句中的连接顺序

五、尽量将多条SQL语句压缩到一句SQL中

六、用where字句替换having字句

七、使用表的别名

八、用union all 替换 union

九、考虑使用“临时表”暂存中间结果


一、创建索引

1、尽量避免全表扫描,首先考虑在where 及 order by 涉及的列上建立索引

2、在经常需要进行检索的字段上创建索引

二、避免在索引上使用计算

在 where 条件中,避免直接对索引列进行计算(这会导致索引失效);

使用 in 和 exists 时,一般使用 exists ,因为 in 不走索引

like  '%aaa%'  不走索引, like  'aa%'  走索引

三、使用预编译查询

使用参数化SQL ,预编译SQL语句,提高查询速度,防止sql注入。

四、调整Where 字句中的连接顺序

DBMS一般采用自下而上的顺序解析where字句,根据这个原理,表连接最好写在其他where连接之前,这样可以过滤掉最大数量记录,即在sql语句中,where 条件判断时,若涉及到多表,则先写表连接,在进行条件判断。

五、尽量将多条SQL语句压缩到一句SQL中

每次执行一条SQL语句的时候都要建立网络连接、进行权限校验,进行SQL语句的查询优化、发送执行结果,非常耗时,将多条SQL进行压缩可减少时间的消耗

六、用where字句替换having字句

避免使用having字句,因为having只会在检索出所有记录之后才对结果集进行过滤,而where是在聚合前筛选结果,能减少开销

七、使用表的别名

连接多个表时,使用表的别名并把别名前缀与每个列名上,可以减少解析时间和语法错误,在涉及到多表时,列名重复是很常见的事,所以在编写sql语句时,给数据表取一个别名,这样即好区分列的所属关系,又简化了sql语句的编写。

八、用union all 替换 union

union 和 union all 的性能差距很大,union 在对两个结果集进行合并的时候会去除重复行,对数据进行排序,而 union all 只是将两个结果集进行简单合并,在时间消耗上远远小于使用 union 的语句,在数据量小的时候可能感觉不少很深,但对大量数据来说,就会有很大的变化。

九、考虑使用“临时表”暂存中间结果

使用临时表暂存结果可以减少对主表的访问,直接查询临时表

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号