SQL优化的几个角度?
大家都在写SQL,但是不同人写出的SQL执行效率却各有不同,这里面的门道也是所有后端开发者的必修课。
所以,在开始之前(MySQL 优化),咱们先来聊聊性能优化的一些原则。
性能优化原则和分类
性能优化一般可以分为:
·主动优化
·被动优化
所谓的主动优化是指不需要外力的推动而自发进行的一种行为,比如当服务没有明显的卡顿、宕机或者硬件指标异常的情况下,自我出发去优化的行为,就可以称之为主动优化。
而被动优化刚好与主动优化相反,它是指在发现了服务器卡顿、服务异常或者物理指标异常的情况下,才去优化的这种行为。
性能优化原则
无论是主动优化还是被动优化都要符合以下性能优化的原则:
1.优化不能改变服务运行的逻辑,要保证服务的正确性;
2.优化的过程和结果都要保证服务的安全性
3.要保证服务的稳定性,不能为了追求性能牺牲程序的稳定性。比如不能为了提高Redis的运行速度,而关闭持久化的功能,因为这样在Redis服务器重启或者掉电之后会丢失存储的数据。
以上原则看似都是些废话,但却给了我们一个启发,那就是我们性能优化手段应该是:预防性能问题为主+被动优化为辅。
也就是说,我们应该以预防性能问题为主,在开发阶段尽可能的规避性能问题,而在正常情况下,应尽量避免主动优化,以防止未知的风险(除非是为了 KPI,或者是闲的没事),尤其对生产环境而言更是如此,最后才是考虑被动优化。
PS:当遇到性能缓慢下降、或硬件指标缓慢增加的情况,如今天内存的占用率是 50%,明天是 70%,后天是 90% ,并且丝毫没有收回的迹象时,我们应该提早发现并处理此类问题(这种情况也属于被动优化的一种)。
MySQL 被动性能优化
所以我们本文会重点介绍 MySQL 被动性能优化的知识,根据被动性能优化的知识,你就可以得到预防性能问题发生的一些方法,从而规避 MySQL 的性能问题。
本文我们会从问题入手,然后考虑这个问题产生的原因以及相应的优化方案。我们在实际开发中,通常会遇到以下 3 个问题:
1.单条SQL运行慢;