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列提供额外信息,如使用索引、临时表和文件排序等,帮助理解查询执行方式。
➡️