MYSQL执行计划的一些总结

  • 背景

        在开发过程中,我们往往没有好好利用到索引,导致系统性能下降;在一些高并发场景的业务开发中,往往导致服务崩掉的,绝大部分是因为数据库的慢查询;我们在开发过程中,需要好好利用Mysql的执行计划,在系统发布前,做好SQL的优化;

  • 执行计划

        要利用执行计划对SQL进行优化,首先必须能看得懂执行计划;下面重点介绍执行计划中的几个重要的字段;

编号字段描述
1id

SQL的执行顺序,执行顺序如下:

  1. id越大,越先执行;
  2. id相同,从上到下执行;
2select_type
编号类型描述
1simple简单查询,不包含子查询和union查询,可以包括join查询;
2primary包含子查询,外查询标记为此类型;
3subquery在select或者where后面包括子查询;
4derived在from后包括子查询;
5union在union后的查询被标记为此类型;
6union result从union结果中,select出来结果的查询;
3type
编号类型描述
1system系统表,表中包含一行记录;
2const通过索引命中单行记录;
3eq_ref扫描主键或者唯一索引,命中单行或者多行返回;
4ref扫描非主键和非唯一索引,命中单行或者多行返回;
5range扫描索引,选择一个范围的值;between,> or < etc.
6index遍历索引树,返回所有行;
7all全表扫描;

【注】我们一般优化SQL至少会到range级别,从上到下性能减弱;

4possible_keys可能使用到的索引;
5key实际使用到的索引;
6key_len索引长度,单位字节key的长度建议不要太长,太长的话,需要考虑用前缀索引优化,对于主键一定要求使用bigint,防止在插入新行的时候产生页分裂带来的性能问题;
7ref显示该表的索引字段关联了哪张表的哪个字段;
8rowsSQL执行所涉及到的行数;
9filtered返回结果的行数占读取行数的百分比,值越大越好;
10extra
编号字段描述
1using filesort使用了索引外排序,性能非常差,造成额外的I/O;常见在order by语句中;
2using temporary使用了临时表,性能也是比较差的,常见group by的语句中;
3using index走覆盖索引,性能不错,避免回表;
4using where用了where子句;
5using join buffer使用了连接查询,并且使用了缓存;建议在join的字段上加上索引;
6distinct行去重;
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值