当前位置: 首页 > news >正文

mysql的explain

explain可以用于select,delete,insert,update的statement。
当explain用于statement时,mysql将会给出其优化器(optimizer)的执行计划。
在这里插入图片描述
通过explain字段生成执行计划表。下面来解析这个执行计划表的每一列的意义。

执行计划表的每一行都描述了查询执行计划中的一个操作或阶段。

id:表示执行顺序,越大越先,相同按展示顺序

select_type(查询的类型)

  • SIMPLE: 一个简单的 SELECT 查询,不包含子查询或 UNION。通常情况下,优化器能够直接确定最佳的执行计划。

  • PRIMARY: 主查询,复杂查询的最外层。

  • SUBQUERY: 不包含在form中的子查询

  • DERIVED: 包含在form中的子查询,mysql会将查询结果放到一个临时表中

  • UNION: 这表示 UNION 查询的第二个或后续查询语句。

table:操作的表

(不重要)partitions:表示查询涉及的分区信息。分区是将表拆分成独立的片段,每个片段称为一个分区,可以根据特定的规则将数据分布到不同的分区中

type:连接方法或者查找中的访问方法

从优到最差的排列:system>const>eq_ref>ref>range>index>ALL

  • null:什么都不做

  • const: 假如user_id 是主键,你使用 WHERE user_id = 1,主键和常量。

  • eq_ref: 访问类型表示在查询中使用了等值连接,并且连接的列在右侧表中是唯一索引,查找聚簇索引树返回数据行。

SELECT *
FROM orders
JOIN customers ON orders.customer_id = customers.customer_id;
  • ref: 基于非唯一索引进行查找,可能返回多个匹配值,因此需要通过引用来进行访问。查找聚簇索引树返回数据行。

  • range: 使用索引进行范围扫描,返回一个范围内的行。

  • index: 查找二级索引树返回聚簇索引值。

  • ALL: 全表扫描,检索表中的所有行,这是最慢的访问方式之一。

possible_key(没啥用):就是可能使用的index,但是没使用

key:查询使用的索引

key_len:表示了索引键的前缀长度,或者是索引键的完整长度

ref:

rows:这个值表示了在执行查询时,MySQL 预计需要扫描和检查的行数,而不是实际返回的行数。

filtered:

Extra:

覆盖索引的意思就是查询结果可以完全由索引列提供,而不需要额外的表访问。
eg.SELECT username FROM users; //username有索引,索引列就是结果

  • Using index: 表示 MySQL 使用了覆盖索引,即只使用了索引而没有访问表中的实际行数据。

  • Using where: 表示 MySQL 在查询中使用了 WHERE 子句中的条件进行筛选,而不是在 Using index 标记中的索引中完成筛选。

  • Using temporary: 表示 MySQL 在执行查询时创建了临时表。

创建使用临时表的情况:sort by,group by,join,子查询

  • Using filesort: 表示 MySQL 在执行查询时使用了文件排序操作。

filesort:将查询结果写入临时文件中,并对临时文件中的数据进行排序操作。

  • Using join buffer: 表示 MySQL 在执行联接操作时使用了联接缓冲区,通常发生在需要对大量数据进行联接时,可以提高查询性能。
http://www.lryc.cn/news/350108.html

相关文章:

  • SpringBoot+Vue实现图片滑块和文字点击验证码
  • 每日复盘-20240515
  • 【Android】Apk图标的提取、相同目录下相同包名提取的不同图标apk但是提取结果相同的bug解决
  • 高校普法|基于SSM+vue的高校普法系统的设计与实现(源码+数据库+文档)
  • pytest教程-47-钩子函数-pytest_sessionfinish
  • 如何使用Python下载哔哩哔哩(Bilibili)视频字幕
  • IP代理网络协议介绍
  • 渗透相关面试+流量分析
  • Shell之高效文本处理命令
  • u3d的ab文件注意事项
  • Go微服务开源框架kratos的依赖注入关系总结
  • Linux 第三十二章
  • 手机号码的正则表达式
  • 机器学习入门介绍
  • 一文说通用户故事点数是什么?
  • GAME101-Lecture07学习
  • 【一步一步了解Java系列】:了解Java与C语言的运算符的“大同小异”
  • ICSE docker related research
  • 【C++】学习笔记——多态_1
  • C++map容器关联式容器
  • TS-抽象类和静态成员
  • SharePoint 使用renderListDataAsStream方法查询list超过5000时的数据
  • 2024042001-计算机网络 - 物理层
  • 通过java将数据导出为PDF,包扣合并单元格操作
  • Java内存模式以及volatile关键字的使用
  • 每日5题Day3 - LeetCode 11 - 15
  • 路由器、交换机和网卡
  • 腾讯开源混元DiT文生图模型,消费级单卡可推理
  • shell脚本基础(if/else结构)
  • 万字长文破解 AI 图片生成算法-Stable diffusion (第一篇)