如果一条sql执行很慢的话,通常会使用MySQL自动的执行计划explain
来去查看这条sql的执行情况,比如在这里面可以通过key
和key_len
检查是否命中了索引,如果本身已经添加了索引,也可以判断索引是否有失效的情况,第二个,可以通过type
字段查看sql是否有进一步的优化空间,是否存在全索引扫描或全盘扫描,第三个可以通过extra
建议来判断是否出现了回表的情况,如果出现了,可以尝试添加索引或修改返回字段来修复。
-
possible_keys 当前sql可能会使用到的索引
-
key 当前sql实际命中的索引
-
key_len 索引占用的大小
通过它们两个查看是否可能会命中索引 -
Extra 额外的优化建议
Extra 含义 Using where; Using Index 查找使用了索引,需要的数据都在索引列中能找到,不需要回表查询数据 Using index condition 查找使用了索引,但是需要回表查询数据 -
type这条sql的连接的类型性能由好到差为NULL、system、const、eq ref、ref、range、 index、all,实际开发过程中至少保持到range类型。
- system:查询系统中的表
- const:根据主键查询V
- eq_ref:主键索引查询或唯一索引查询
- ref:索引查询
- range:范围查询
- index:索引树扫描
- all: 全盘扫描