MySQL使用explain查看执行计划

CoderGO: MySQL使用explain查看执行计划

explain可以显示MySQL对于语句的执行计划,在5.6以及以后的版本中,除过select,其他比如insert,update和delete均可以使用explain查看执行计划。

  1. extended关键字:在explain后使用extended关键字,可以显示filtered列和warning信息,更多查看mysql文档:http://dev.mysql.com/doc/refman/5.7/en/explain-extended.html
  2. partitions关键字:显示查询将访问的分区,如果你的查询是基于分区表。
  • id列 查询的编号,没有子查询,均为1,有子查询则会编号。
  • select_type列 两种大类,简单查询(simple)与复杂查询(subquery(select列表中的子查询),derived(from子句中的子查询),union(union第二个和随后的select))
  • table列 显示了对应行正在访问哪个表或者其别名。
  • type列 关联的类型,或者说是访问类型
    • all 全表扫描。
    • index 全表扫描,扫描时按索引排序而不是行。避免了排序,但仍然要进行全表扫描。按照随机次序访问行,开销非常 大。
    • range 有限制的范围扫描。
    • ref 索引查找,返回所有匹配某个单值的行。可能找到多个符合条件的行,查找和扫描的混合体。只有使用非唯一性索引或者唯一性索引的非唯一前缀时才发生。 索引需要和某个参考值相比较,参考值可以是一个常数,或者来自多表查询前一个表中的结果值。
      • eq_ref 最多返回一个符合条件的记录,可以在MySQL中使用主键或唯一性索引查找时看到,
      • const, system 当MySQL可以对某部分优化将其转换为一个常量时,则其会使用这些访问类型。
      • NULL MySQL可以在优化阶段分解查询语句,执行阶段不用访问表或者索引。


  • possible_keys
    显示查询时可以使用哪些索引,基于查询访问的列或和使用的比较操作符来判断的。在查询的优化过程的早期创建的,因此只是一个估计。
  • key列
    显示了MySQL使用哪个索引优化表的访问,如果它没有出现在possible_keys中,则mysql选择它可能有其他原因,如可能选择索引覆盖。
  • key_len
    显示了索引字段中可能的最大长度,不是表中数据使用的实际字节数。key_len通过查找表的定义而计算,并不是表中的数据。
  • ref
    显示查询文本中表所使用的常量或者列。
  • rows
    估计找到结果所用读取的行数。
  • filtered
    使用explain extended时显示,显示针对表里符合某个条件(where子句或者联结条件)的记录数的百分比所做的一个悲观估算,即mysql将要过滤行数的百分比。
  • extra
    额外信息
    • using index 显示MySQL将使用索引覆盖访问数据。
    • using where MySQL服务器将在存储引擎检索行后进行过滤,
    • using temporary MySQL对结果排序时会使用临时表。
    • using filesort MySQL会对结果进行外部排序。
    • Rang checked for each record (index map:N) 没有好用的索引,新的索引将在联结的每一行上重新估算。N显示在possible_keys列中索引的位图。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值