写点什么

2020 年 6 月 26 日 查询性能优化

发布于: 2020 年 06 月 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、重构查询的方式



4、执行查询的基础

5、MySQL查询优化器的局限性

6、查询优化器的提示

7、优化特定类型的查询

8、案例学习

9、总结

用户头像

还未添加个人签名 2020.05.18 加入

还未添加个人简介

评论

发布
暂无评论
2020年6月26日   查询性能优化