是否向数据库请求了不需要的数据
- 查询求情超过了实际需要的数据,多余的数据会被应用程序丢弃
- 对MySQL服务器增加了网络开销,消耗了应用服务器的CPU和内存资源
常见的错误,MySQL执行查询,查询出全部结果集,客户端应用程序接收全部结果集数据,抛弃大部分数据
拒绝SELECT *,指定字段
避免重复查询相同的数据,对重复的数据进行缓存
MySQL是否在扫描额外的记录
三项指标都会记录到MySQL的慢日志中
响应时间 = 服务时间 + 排队时间
- 服务时间,数据库处理这个查询花了多少时间
- 排队时间,比如IO等待时间和锁的等待时间
扫描的行数和返回的行数,理想情况下扫描的行数和返回的行数相同,但实际比率在 1:1和10:1之间
扫描的行数和返回的类型,使用explain语句,查看访问列和索引等信息
添加一个合适的索引可以有效避免全表扫描
WHERE的使用方式(由好到坏)
- 索引中使用where过滤不匹配的记录,在存储引擎层完成
- 使用索引覆盖扫描返回记录,直接从索引中过滤不需要的记录,在MySQL服务层完成(Extra中出现Using Index)
- 从数据表中返回数据,然后过滤不满足条件的记录,先从表读记录再过滤(Extra中出现Using Where)

慢查询优化
原文:https://www.cnblogs.com/YC-L/p/13828587.html