都9012年啦,不懂得这些SQL语句优化,你是要吃大亏的

引言

数据库的性能优化技术一直是个老生常谈的问题,不管是MySQL、SQL Server还是Oracle。

对于我们IT开发人员和运维人员,掌握常用的SQL 优化语句是非常必要的,它可以使你的工作变得“事半功倍”,会为你带来很多便利和节约很多时间。

都9012年啦,不懂得这些SQL语句优化,你是要吃大亏的

接下来,我将带领你们认识以下的常用优化语句。

1. SQL语句要一致,避免出现大小写

都9012年啦,不懂得这些SQL语句优化,你是要吃大亏的

如果让你看上面两条SQL语句,你是不是觉得它们是一样的?

但是对于数据库软件在搜索时,可就不一样了。他会认为是两句SQL语句,因此要进行两次解析,生成两段执行代码。

因此,我们程序员在开发时要注意保证相同的SQL语句在其他地方也有要完全一致,多个空格、逗号都不行。

2. 正确使用like模糊查询,避免全表扫描

都9012年啦,不懂得这些SQL语句优化,你是要吃大亏的

对于上面的模糊查询,如like 后面的“%chicken%”,因为 chicken 前面存在了%,那么程序就得对整个表进行扫描,耗费时间,资源。所以,在非必要的情况下,请不要在关键字前面加 %。

3. where 语句中请不要出现对null的判断,这样会导致引擎放弃索引进而进行全表扫描,办法是用0来替换null。

都9012年啦,不懂得这些SQL语句优化,你是要吃大亏的

4. 限制性使用 count(*)

都9012年啦,不懂得这些SQL语句优化,你是要吃大亏的

以上语句中,使用count(*),就会对全表进行查询。多次一举,还降低数据库性能。

5. where 多条件查询时,将数量少的放在前面

都9012年啦,不懂得这些SQL语句优化,你是要吃大亏的

上图中,第一条SQL语句 性别为1 的很多,先选择出sex =1的,然后再对剩下的数据根据name 字段查询,这样的效率很低。

而第二条SQL 语句 先对那么字段进行筛选,剩下的数据就变得很少了,再根据sex=1,这样效率很高,数据库执行也很快。

6. 不要一味地追求 Select *

都9012年啦,不懂得这些SQL语句优化,你是要吃大亏的

第一句SQL语句, select * 会增加数据查询表的时间,因为它需要user 这个表中所有的数据都给你查询出来,另外查询出来的数据传递给你也是要耗费时间的。

而第二句SQL语句,则定位很精准。不必要把表中不需要的数据查询出来,效率高,执行速度快。

7. 合理使用索引,不要出现以下操作

  • 索引字段上面不要出现 where !=或者是 where >,< 等这样的操作符;
  • 索引字段上面不要出现类型转换的问题,(比如字段要求的是BOOL类型,而你传入的参数却是String类型);

上述操作会导致索引失效,进而会使数据库查询变成了 全表查询。

8. 对于SQL语句要学会拆分法

当一个SQL语句过于冗余、杂乱时,嵌套了多级查询,其实这样也会降低SQL的性能问题。对于此问题,应该懂得拆分SQL语句,用多个SQL语句完成那个复杂的嵌套的SQL语句,程序速度会变快。

9. 多使用 not exist 而非 not in

都9012年啦,不懂得这些SQL语句优化,你是要吃大亏的

对于第二个SQL语句,使用了 not in 会对内外表都进行了全表查询,没有用到了索引; 而对于 not exist 利用到了索引,索引效率会高。

10、OR 不要想当然的就使用

都9012年啦,不懂得这些SQL语句优化,你是要吃大亏的

对于上述两条SQL语句,表明上看两者的执行效率应该差不多。其实天壤之别,or执行的是全表查询,而 union利用的是索引查询,后者效率要高的多。

结论

从上述总结的SQL语句优化方法可以看得出来:

  • 查询的时候要尽量使用数据库引擎索引;
  • 还有就是写的查询语句条件尽量简单明了,不要冗余复杂
  • 理解各个关键词的作用,并且不要使用错误的SQL语句,反而会是累赘。

相关推荐