为什么查询速度会慢
1.慢是指一个查询的响应时间长。一个查询的过程:
- 客户端发送一条查询给服务器
- 服务器端先检查查询缓存,如果命中了缓存,则立可返回存储在缓存中的结果。否则进入下一个阶段
- 服务器端进行SQL解析、预处理,再由优化器生成对应的执行计划。
- MySQL根据优化器生成的执行计划,调用存储引擎的API来执行查询。
- 将结果返回给客户端
2.数据访问
- 是否向数据库请求了不需要的数据
- 是否扫描额外的记录
3.查询的方式
- 一个复杂的查询还是多个简单的查询
- 切分查询(将大查询切分成小查询,循环完成小查询)
- 分解关联查询
慢查询分析
问题SQL
把复杂的SQL分成多个简单SQL并执行,查看具体那个字段会慢,区分度不高。
EXPLAIN
显示SQL如何使用索引的执行计划。
执行计划的参数:
table 显示这一行的数据是关于哪张表的
type 显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、indexhe和ALL
possible_keys 显示可能应用在这张表中的索引。如果为空,没有可能的索引。可以为相关的域从WHERE语句中选择一个合适的语句
key 实际使用的索引。如果为NULL,则没有使用索引。很少的情况下,MYSQL会选择优化不足的索引。这种情况下,可以在SELECT语句中使用USE INDEX(indexname)