目录
一、SQL优化分两部分,如何发现慢SQL和如何优化慢SQL
-
发现慢SQL有两种方案:第一种是开启我们的慢日志, 第二种就是使用skywalling发现慢的接口,进而发现慢sql
-
比如说我们采用慢日志的方式发现慢sql,可以结合xxl-job每天定时扫描,将慢sql,发到我们公司的邮箱里。
-
我们在使用explan分析计划分析一下这些慢sql
-
提到explan,我们重点说一下我们的type列
-
const:通过索引只返回一行数据
-
eq_ref:通过等值查询返回数据
-
ref:通过非唯一索引返回数据
-
range:范围查询
-
index:全索引扫描
-
all:全表扫描
-
如果发现我们的sql,通过explain分析计划没有走索引,那就要考虑一下索引是否失效,看看sql是否满足最左匹配原则,查询的范围有没有大于三分之一、列上是否有函数计算、数据类型是否匹配等。
二、项目举例
-
在我们的项目当中,我们也遇到过SQL优化的场景,比如说我们做了一个报表,统计一下商品的过期时间,一开始我们数据库里的数据量比较少,接口的响应速度很快,后来数据量慢慢变大,我们通过skywalling发现这个报表的接口响应速度有点慢,那我们就去分析,分析它的原因是将过期时间的计算都交给了数据库,导致数据库的压力比较大,所以我们在看库存表里派生出一个过期时间字段,在业务层就将这个字段的值给计算出来,这样就减少了数据库的压力,提高了接口的响应速度。