MYSQL EXPLAIN 执行计划 | 京东物流技术团队

💡 原文中文,约8700字,阅读约需21分钟。
📝

内容提要

执行计划是通过使用EXPLAIN语句来查看查询语句的具体执行计划,包括表的读取顺序、操作类型、使用的索引等。每个查询语句都有一个唯一的id值,表示执行优先级。查询语句中的每个SELECT关键字都有一个select_type属性,表示其在整个查询中的角色。执行计划中的type列表表示访问方法或类型,从最好到最坏依次是:system、const、eq_ref、ref、range、index、ALL。key_len列表表示索引中使用的字节数,rows列表表示预计扫描的行数,filtered列表示过滤后剩余记录的百分比。Extra列表表示额外信息,如使用索引、使用临时表、使用文件排序等。

🎯

关键要点

  • 执行计划通过EXPLAIN语句查看查询的执行方式,包括表的读取顺序、操作类型和使用的索引。
  • 每个查询语句有唯一的id值,表示执行优先级,SELECT关键字有select_type属性,表示角色。
  • 执行计划中的type列表表示访问方法,从最好到最坏依次为:system、const、eq_ref、ref、range、index、ALL。
  • key_len表示索引中使用的字节数,rows表示预计扫描的行数,filtered表示过滤后剩余记录的百分比。
  • EXPLAIN语法简单,在SQL查询前加上EXPLAIN关键字,适用于SELECT、DELETE、INSERT、UPDATE语句。
  • EXPLAIN输出结果包括表的读取顺序、操作类型、可用索引、实际使用的索引和表之间的引用。
  • 查询中每个SELECT关键字对应一个唯一的id值,id值越大执行优先级越高。
  • 连接查询中每个表对应一条记录,id值相同,表示同一查询的多个表。
  • 子查询和UNION查询中,每个SELECT关键字也对应一个唯一的id值,可能会被优化器重写。
  • select_type属性指示小查询在大查询中的角色,取值包括SIMPLE、PRIMARY、UNION、UNION RESULT、SUBQUERY和DERIVED。
  • type列表示访问方法,system表示只有一条记录,const表示主键匹配,eq_ref表示通过主键或唯一索引匹配。
  • ref表示通过普通二级索引列与常量匹配,range表示范围查询,index表示扫描全部索引记录,ALL表示全表扫描。
  • possible_keys列表示可能用到的索引,key列表示实际使用的索引,key_len表示索引记录的最大长度。
  • rows列表示预计扫描的行数,filtered列表示经过过滤后剩余记录的百分比。
  • Extra列提供额外信息,如使用索引、临时表和文件排序等,帮助理解查询执行方式。
➡️

继续阅读