2020 年 6 月 26 日 查询性能优化
如果把查询看作是一个任务,那么它由一系列子任务组成,每一个子任务都会消耗一定的时间。如果要优化查询,实际上要优化其子任务
1、为什么查询速度会慢
查询的生命周期大致可以按照顺序来看:从客户端,到服务器,然后在服务器上进行解析,生成执行计划,执行,并返回结果给客户端。
了解查询的生命周期,清楚查询的时间消耗情况对于优化查询有很大意义。
2、慢查询基础:优化数据访问
2.1、是否向数据库请求了不需要的数据
1、查询不需要的记录
2、多表关联时返回全部列
3、总是取出全部列
4、重复查询相同的数据
2.2、MySQL是否在扫描额外的记录
最简单的衡量查询开销的三个指标如下:响应时间、扫描行数、放回的行数。检查慢日志是找出扫描行数过多的查询好方法。
响应时间:服务时间+排队时间
服务时间指的是数据库处理这个查询真正花了多长时间。
排队时间是指服务器因为等待某些资源而真正没有执行查询的时间
扫描的行数和返回的行数
理想情况下扫描的行数和返回的行数应该是相同的,分析查询时,应该查看查询扫描的行数是非常有帮助的。
扫描的行数和访问类型
在Explain语句中的type列反映了访问类型,访问类型有很多种,从全表扫描到索引扫描,范围扫描,唯一索引查询,常熟引用等。这里列的这些,速度是从慢到快,扫描的行数是从多到少。
SQL优化1:where条件的一般优化的思路:
1、在索引中使用where条件来过滤不匹配的记录。
2、使用索引覆盖扫描来返回记录,直接从索引中过滤不需要的记录并返回命中结果
3、从数据表中返回数据,然后过滤不满足条件的记录
SQL优化2:如果出现查询需要扫描大量的行但是返回少量的数据:
1、使用索引覆盖扫描,把所有的需要用的列都放到索引中
2、改变库表结构
3、重写复杂的查询SQL,让MySQL优化器能以更优化的方式执行这个查询
3、重构查询的方式
评论