Mysql Explain的使用

各个字段的含义

  • id:表示执行顺序

    相同的id执行顺序为从上到下

    不同的id执行顺序为从大到小

  • select_type:用于表示查询类型

    • SIMPLE:简单的select查询,查询中不包含子查询或union

    • PRIMARY:查询中包含任何复杂的子部分,最外层的查询则被标记为primary

    • SUBQUERY:在select或where列表中包含了子查询

    • DERVIED:在from列表里面包含的子查询被标记为DERVIED(衍生),mysql执行完子查询之后会把结果放在一个临时表里面,DERVIED后面的数字表示是由哪个表查询后衍生出来的

    • UNION:

      若第二个select出现在union之后,则会被标记为union

      若union包含在from子句的子查询中,外层select将被标记为DERVIED

    • UNION RESULT:从UNION表获取结果的SELECT

  • table 表名

  • type:访问类型列表

    最好到最差如下:system>const>eq_ref>ref>range>index>all

    一般查询最好能达到ref级别,最少要达到range级别

    • const:出现于主键索引或者唯一的(仅查出一条)

      select * from user where id = 1;
    • eq_ref:对于每个索引键,表中只有一条记录与之匹配

    • ref:非唯一性索引扫描,返回匹配所有单独值的所有行

      • 比如以部门作为索引

        查研发部,有两百人,则查研发部的这条语句就是ref级别的

        查总裁部,只有一个人,则查总裁办的这条语句就是eq_ref级别的

    • range:只检索给定范围的行,使用一个索引来选择行(查出来的数据要是应只有一条)

      key列显示使用了哪个索引,一般出现于范围查询,例如between,in等

    • index:index和all都是全表扫描,但是index只遍历索引

    • all

  • possible_keys:查询中可能可以用到的索引

  • key:实际上用到的索引

  • key_len:表示索引中使用的字节数,通过该列计算查询中使用的索引的长度,在不损失精确性的情况下,长度越短越好

  • ref:显示索引的哪一列被使用了,如果可能的话,是一个常熟,哪些列或者常量被用于查找索引列上的值

  • rows :根据表统计信息以及索引的选用情况,大致估算出找到所需的记录所需读取的行数

posted @   尽深  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示