• 面试官:MySQL explain你会关注哪些字段


    编号字段名称字段说明重要性
    1idSELECT查询序号,即为sql语句执行的顺序。数字越大越优先执行1、2、3...★★
    2select_typeselect类型,用于区分是普通查询、子查询或联合查询simple:简单的查询,不含子查询和联合查询primary:子查询的最外层查询为primaryunion:在 union、union all 和子查询中的第二个和随后的 select为 uniondependent union:各个小查询都依赖于外层查询的话,那除了最左边的那个小查询之外,其余的小查询就是 dependent unionunion result:从union表获取结果的 select为 union resultsebquery:在select或者where列表中包含子查询(不在from子句中)dependent sebquery:在 select 或者 where 列表中包含子查询derived:在 form 列表中包含的子查询被标记为 derived,也叫做派生类uncacheable sebquery:一个子查询的结果不能被缓存uncacheable union:表示 union 的查询结果不能被缓存★★
    3table表名或者别名,可能是临时表或者 union 合并结果集table_name
    4type访问类型,表示以何种方式去访问数据库system:系统表const:最多只能匹配到一条数据eq_ref:当进行等值联表查询使用主键索引或者唯一性非空索引进行数据查找ref:查询使用的字段是个非唯一性索引索ref_or_null:字段既需要关联条件,也需要 null 值index_merge:在查询过程中需要多个索引组合使用unique_subquery:利用唯一索引来关联子查询,不再扫描全表index_subquery:利用索引来关联子查询,不再扫描全表range:利用索引查询的时候限制了范围,在指定范围内进行查询index:全索引扫描all:全表扫描system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL★★★★★
    5possible_keys显示查询可能使用哪些索引来查找索引名称★★
    6key实际使用的索引索引名称★★★
    7key_len索引中使用的字节数数值★★★
    8refref列显示使用哪个列或常数与key一起从表中查询列名或const★★★
    9rows显示MYSQL执行查询的行数,数值越大越不好数值★★★★★
    10filtered百分比值, 表示存储引擎返回的数据经过滤后, 剩下多少满足查询条件记录数量的比例百分比★★★★
    11extraMySQL解决查询的详细信息using filtersort:说明 mysql 无法利用索引进行排序,只能利用排序算法进行排序using index:表示当前的查询是覆盖索引的,直接从索引中读取数据using where:使用 where 进行条件过滤using temporary :建立临时表来保存中间结果,查询完成之后把临时表删除using join buffer:使用连接缓存impossible where:where 语句的结果总是 false★★★★

    1. id

    id就是select查询序号,标志sql语句执行的顺序,数字大的先执行。

    2.select_type

    SELECT类型,它有以下几种值

    2.1 SIMPLE

    它表示简单的select,没有联合查询和子查询

    2.2 PRIMARY

    在有子查询的语句中,最外层的select查询就是primary

    2.3 union

    在 union、union all 和子查询中的第二个和后面的 select 会被标记为 union

    2.4 dependent union

    在包含 union 或者 union all 的大查询中,如果各个小查询都依赖于外层查询的话,那除了最左边的那个小查询之外,其余的小查询的 select_type 的值就是 dependent union

    2.5 union result

    从 union 表获取结果的 select 会被标记为 union result

    2.6 sebquery

    在 select 或者 where 列表中包含子查询(不在from子句中)

    2.7 dependent sebquery

    子查询中的第一个 select(不在 from 子句中),并且取决于外层查询

    2.8 derived

    在 form 列表中包含的子查询被标记为 derived,也叫做派生类

    2.9 uncacheable sebquery

    一个子查询的结果不能被缓存

    2.10 uncacheable union

    表示 union 的查询结果不能被缓存

    3 Table

    explain 语句访问的表名或者别名

    4 type

    访问类型,表示以何种方式去访问数据库

    4.1 system

    表仅有一行,这是const类型的特列

    4.2 const

    表最多有一个匹配行,const用于比较primary key 或者unique索引。

    4.3 eq_ref

    当进行等值联表查询使用主键索引或者唯一性非空索引进行数据查找

    4.4 ref

    查询使用的字段是个非唯一性索引索

    4.5 ref_or_null

    字段既需要关联条件,也需要 null 值

    4.6 index_merge

    在查询过程中需要多个索引组合使用

    4.7 unique_subquery

    利用唯一索引来关联子查询,不再扫描全表

    4.8 index_subquery

    利用索引来关联子查询,不再扫描全表

    4.9 range

    利用索引查询的时候限制了范围,在指定范围内进行查询

    4.10 index

    全索引扫描

    4.11 ALL

    全表扫描

    5 possible_keys

    显示查询可能使用哪些索引来查找,可能应用在这张表中的索引,一个或多个,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询实际使用

    6 keys

    实际使用的索引,如果为 null ,则表示没有使用索引

    7 key_len

    MYSQL使用的索引长度

    8 ref

    ref列显示使用哪个列或常数与key一起从表中查询

    9 rows

    显示MYSQL执行查询的行数,数值越大越不好

    10 filtered

    百分比值, 表示存储引擎返回的数据经过滤后, 剩下多少满足查询条件记录数量的比例.

    11 Extra

    该列包含MySQL解决查询的详细信息。

    • using filtersort:说明 mysql 无法利用索引进行排序,只能利用排序算法进行排序
    • using index:表示当前的查询是覆盖索引的,直接从索引中读取数据
    • using where:使用 where 进行条件过滤
    • using temporary :建立临时表来保存中间结果,查询完成之后把临时表删除
    • using join buffer:使用连接缓存
    • impossible where:where 语句的结果总是 false
  • 相关阅读:
    07数据结构与算法刷题之【树】篇
    【效率提升】手把手教你如何使用免费的 Amazon Code Whisperer 提升开发效率堪比 GitHub Copilot 平替
    云计算及其应用知识点总结
    Grafana安装后web打开报错
    !还不了解位操作符?????!!!!!
    36-Java方法的案例:求和、判断奇偶数、求最值
    java定时器实现的三种方式
    0096 克鲁斯卡尔算法,迪杰斯特拉算法
    Qt::绘制框架-选择节点-QGraphicsScene-items
    用echarts显示本年365天每天的数据
  • 原文地址:https://blog.csdn.net/citywu123/article/details/128116769