熟悉并且进场使用数据库的童鞋们应该都对SQL优化这个知识点不陌生了吧!这个也是我们在技术面试时经常会被面试官问到的问题,所以你们知道多少呐,跟着本糯米丸子来一起复习复习吧!
既然是SQL优化,那我们就要从语句本身去寻找优化方法。以下是本丸子查阅各种资料总结的常见SQL优化的方法,要记住哦。不管是面试还是工作,都会用得的哦!
1、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。注:但是索引并不是越多越好,一个表的索引最好不要超过6个。索引实质是用空间换时间的形式提高了效率,如果太多那么需要更多空间来存储索引,而且更新操作需要额外的时间来维护索引。所以索引并不是多多益善哦;
2、避免在索引上使用计算;
3、避免在 where 子句中使用!=或<>操作符、在where子句中对字段进行 null 值判断、在where子句中使用 or 来连接条件,以上这些操作会导致导致引擎放弃使用索引而进行全表扫描;
4、用 EXISTS 替代 IN、用 NOT EXISTS 替代 NOT IN;
5、尽可能的使用 varchar/nvarchar 代替 char/nchar ,因为首先变长字段存储空间小,可以节省存储空间,其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些;
6、任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段;
7、考虑使用“临时表”暂存中间结果 注:1)简化SQL语句的重要方法就是采用临时表暂存中间结果,但是,临时表的好处远远不止这些,将临时结果暂存在临时表,后面的查询就在tempdb中了,这可以避免程序中多次扫描主表,也大大减少了程序执行中“共享锁”阻塞“更新锁”,减少了阻塞,提高了并发性能。但是也得避免频繁创建和删除临时表,以减少系统表资源的消耗。2)在新建临时表时,如果一次性插入数据量很大,那么可以使用 select into 代替 create table,避免造成大量 log ,以提高速度;如果数据量不大,为了缓和系统表的资源,应先create table,然后insert。3)如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先 truncate table ,然后 drop table ,这样可以避免系统表的较长时间锁定。
8、尽量避免使用游标;
以上的知识点可能只是SQL优化方法中的一小部分,但是本丸子觉得掌握好这些就掌握好了SQL优化的基础,解决的SQL优化问题越多,自然就能总结出一套SQL优化的自成体系,根据实际情况进行最具效率的SQL优化。
其实本丸子认为任何事情只要了解到它本身的一些运行体系机制或是原理,那么围绕它进行各种操作也就很简单了。就比如说追求女朋友这件事,只需要调查清楚这个女孩各种喜好,成为女朋友就不成问题。啊啊啊啊,扯远了,我的意思是其实可以去看看SQL本质的一些东西,这样做优化可能更会因地制宜。
首先SQL语句的执行顺序大家应该了解一下:
FROM——ON——JOIN——WHERE——GROUP BY——SUM、COUNT——HAVING——SELECT——DISTINCT——ORDER BY——LIMIT
与写SQL的顺序不同,SQL的执行顺序并不是从select开始,而是从from开始
执行计划——EXPLAIN
执行计划,是SQL在数据库中执行时的表现情况,通常用于SQL性能分析,优化等场景。
在MySQL使用 explain 关键字来查看SQL的执行计划。
基本的语法:EXPLAIN(select * from table)
在常规SQL语句前面加上EXPLAIN即可
在实际操作过程中,可以使用EXPLAIN来查询当前SQL的执行计划,方便进行相应的SQL优化。
以上就是本丸子参考各方书籍资料总结的SQL优化相关知识,大家一起学习呀,有不对的地方也希望能人志士踊跃提出,一起进步。
网友评论