• Mysql优化---type、key、Extra等字段含义


    (3) type: 索引类型、类型

    • system>const>eq_ref>ref>range>index>all
      其中:system,const只是理想情况;实际能达到ref>range

    system: 只有一条数据的系统表;或衍生表只有一条数据的主查询

    const:仅仅能查到一条数据的SQL,用于Primary key或者unique索引

    rq_ref:唯一性索引,对于每个索引键的查询,返回匹配唯一行数据(有且只有1个,不能多、不能0)
    例如:select…from …where name=… 其中name必须为索引且唯一。

    ref: 非唯一性索引,对于每个索引键的拆线,返回匹配的所有行(0,多)

    range: 检索指定范围的行,where后面是一个范围查询(between, >, <…)
    注意:in有时候会失效,从而转为无索引。

    index:查询全部索引中数据

    all:查询所有表中数据

    (4)possible_keys:可能用到的索引,是一种预测,不准。

    (5)key:实际使用到的索引

    (6)key_len: 索引的长度;
    • 作用:用于判断复合索引是否被完全使用(a,b,c)。

    (7)ref: 注意与type中的ref值区分。

    • 作用:指明当前表所参照的字段

    (8)rows: 被索引优化查询的数据个数(通过索引查到的数据个数)

    (9)Extra:

    • using filesort : 性能消耗大;需要额外一次查询
      例如:explain select * from test where a1=‘’ order by a2; --using filesort
      小结:1. 对于单索引,如果排序和查找是同一个字段,则不会出现using filesort;如果排序和查找不是同一个字端,则会出现。
      避免:where哪些字段,就order by 那些字段
      2. 对于复合索引,如果排序和查找的使用顺序是一致的(跨列部分索引失效,因此不算),则不会出现using filesort, 反之则会。
      复合索引:不能跨列(最佳左前缀)
      避免:where和order by按照复合索引的顺序使用,不要跨列或无序使用。
    • using temporary :性能损耗大,用到了临时表,一般出现在group by语句中。
      例如:explain select * from tests03 where a2 = 2 and a4=4 group by a3
      避免:查询哪些列,就根据哪些列group by.
    • using index :性能提升;索引覆盖(覆盖索引)。只要查询的列全为索引,即可达成索引覆盖。
    • using where :需要回表查询。
      假设age为索引
      例如:explain select age, name from test03 where age = a2;
    • impossible where: where子句永远为false.
  • 相关阅读:
    自学网络编程第一天- HTTP基础:基础原理、Request请求、Response应答
    kube-scheduler 调度流程
    Vue 的详情介绍-特点与优势- 使用方式-vue-js小结
    【二】2D测量 Metrology——get_metrology_object_model_contour()算子
    极大似然估计概念的理解——统计学习方法
    【AcWing单源最短路建图】1126. 最小花费
    C++交叉编译grpc
    【东软实训Day2】用Java实现客户端与服务器交互
    中望CAD 2025 (ZW3D2025) 简体中文修改版
    Redis常见问题
  • 原文地址:https://blog.csdn.net/qq_52001969/article/details/125508096