• Explain 执行计划中的 type 字段



    type 字段决定 mysql 如何查找表中的数据,查找数据记录的大概范围。这个字段值表示的从最优到最差依次为:

    system > const > eq_ref > ref > range > index > all;
    
    • 1

    一般来说我们优化到 range 就可以了 最好到 ref

    null : type 字段的值如果为 null,那么表示当前的查询语句不需要访问表,只需要从索引树中就可以获取我们需要的数据。

    一般如果是主键索引的话 ,查询主键字段或者唯一索引的话 查询主键字段 type 字段的值就为 null。

    system/const :用户主键索引或者唯一索引查询时,只能匹配 1 条数据。一般可以对 sql 查询语句优化成一个常量,那么 type 一般就是 system 或者 const,system 是 const 的一个特例。

    如:explain select * from (select * from film where id = 1) tmp;

    eq_ref :在进行连接查询时,例如 left join 时,如果是使用主键索引或者唯一索引连接查询 ,结果返回一条数据,则 type 的值为一般为 eq_ref。

    ref : 相比较 eq_ref,不使用主键索引或者唯一索引,使用的是普通索引或者唯一索引的部分前缀,索引与一个值进行比较后可能获取到多个符合条件的行,不在是唯一的行了。

    range :通常使用范围查找,例如between,in,<,>,>= 等使用索引进行范围检索。

    index :扫描索引树就能获取到的数据,一般是扫描二级索引,并且不会从根节点扫描,一般直接扫描二级索引的叶子节点,速度比较慢。因为二级索引叶子节点不保存表中其他字段数据 只保存主键,所以二级索引还是比较小的,扫描速度相比 All 还是很快的。

    这里用到了覆盖索引,什么是覆盖索引:可以直接遍历索引树就能获取数据叫做覆盖索引。这里遍历 name 索引树就可以获取到主键 id 的值就是覆盖索引。

    ALL :这是一种效率最低的 type,需要扫描主键索引树的叶子节点,获取数据是表中其他列的数据,即全表扫描。


  • 相关阅读:
    Tomcat下载安装配置
    如何使用 python 爬取酷我在线音乐
    使用JMeter的JSON提取器:通过递归下降查找,从接口响应中提取特定字段
    CSS实现空心的“尖角”
    后端返回的id到前端后 后面几位数全部变成0了 问题解决
    【docker下安装jenkins】(一)
    Linux网络基础2之http
    【App自动化测试】(十二)App异常弹框处理
    CentOS7.6+openGauss2.1.0【纯安装操作步骤】
    caffe安装探索整理
  • 原文地址:https://blog.csdn.net/m0_51111980/article/details/127643643