MySQL中EXPLAIN详细讲解

好的,我会进一步详细讲解 EXPLAIN 语句的每个字段,并深入说明它们的意义和作用,帮助你更全面地理解 MySQL 查询的执行计划。

EXPLAIN 语句的字段详解:

1. id:查询标识符
  • 作用id 表示查询计划中的唯一标识符,它主要用于区分不同的查询步骤。在复杂的查询中,尤其是包含子查询、联合查询等,id 用于标识每个子查询和查询部分的顺序。

    • 基本规则

      • 对于简单查询,id 会是 1,表示查询是单一的。
      • 对于包含子查询的查询,id 会标记主查询和子查询的执行顺序,id 小的先执行。
      • id 值相同的行表示它们属于同一个查询块(子查询)。
    • 示例

       

      sql

      复制代码

      EXPLAIN SELECT * FROM employees WHERE department = 'Sales';

      返回:

      idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra
      1SIMPLEemployeesrefdept_indexdept_index4const10Using where
    • 在包含多个查询的情况下:

       

      sql

      复制代码

      EXPLAIN SELECT * FROM orders WHERE order_id IN (SELECT order_id FROM order_items WHERE product_id = 1);

      返回:

      idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra
      1PRIMARYordersreforder_id_idxorder_id_idx4const50Using where
      2SUBQUERYorder_itemsrefproduct_idxproduct_idx4const100Using where
      • 这里 id 为 1 的是主查询,而 id 为 2 的是子查询,id 越小的先执行。
2. select_type:查询类型
  • 作用select_type 用来标识查询的类型。这个字段告诉我们查询中包含的操作类型,例如主查询、子查询、联合查询等。

    • 常见值

      • SIMPLE:简单查询,没有子查询。
      • PRIMARY:主查询,复合查询中的主查询部分。
      • UNION:联合查询的第二个或后续查询部分。
      • DEPENDENT UNION:依赖于外部查询的联合查询。
      • SUBQUERY:子查询。
      • DEPENDENT SUBQUERY:依赖于外部查询的子查询。
      • DERIVED:派生表,即子查询作为临时表。
      • MATERIALIZED:物化子查询(MySQL 8.0 引入),表示子查询的结果被缓存了。
    • 示例

       

      sql

      复制代码

      EXPLAIN SELECT * FROM orders WHERE customer_id = 123;

      结果:

      idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra
      1SIMPLEordersrefcustomer_idxcustomer_idx4const10Using where
      • select_type = SIMPLE,表示这是一个简单查询。
3. table:查询的表
  • 作用table 表示当前操作涉及的表名。如果查询涉及多个表(例如 JOIN 查询),则会列出每个表。

    • 示例

       

      sql

      复制代码

      EXPLAIN SELECT * FROM employees WHERE department = 'Sales';

      返回:

      idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra
      1SIMPLEemployeesrangedept_salarydept_salary4NULL500Using where
      • table = employees,查询的表是 employees 表。
4. type:连接类型
  • 作用type 显示了 MySQL 执行查询时表之间的连接方式。这个字段是查询效率的重要标志,连接类型越低效,查询速度越慢。

    • 常见值

      • ALL:全表扫描,效率最低。
      • index:索引扫描,但仍然扫描索引的每一行,效率高于全表扫描。
      • range:范围扫描,使用索引范围查找。
      • ref:非唯一索引扫描,基于某个字段的索引查找。
      • eq_ref:对于每一行,查询仅使用唯一索引进行查找,通常用于连接操作。
      • const:查询条件能在查询执行前确定,效率最高。
      • system:表只有一行数据,等于 const,非常高效。
      • NULL:表示没有表参与查询,通常出现在系统表查询中。
    • 示例

       

      sql

      复制代码

      EXPLAIN SELECT * FROM employees WHERE department = 'Sales';

      返回:

      idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra
      1SIMPLEemployeesrangedept_salarydept_salary4NULL500Using where
      • type = range,表示使用了范围扫描,效率较高。
5. possible_keys:可能使用的索引
  • 作用possible_keys 列出 MySQL 查询中可能使用的所有索引。MySQL 会根据查询条件(WHERE)和表结构自动选择最合适的索引。

    • 示例

       

      sql

      复制代码

      EXPLAIN SELECT * FROM employees WHERE department = 'Sales';

      返回:

      idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra
      1SIMPLEemployeesrangedept_salarydept_salary4NULL500Using where
      • possible_keys = dept_salary,表示查询可能使用 dept_salary 索引。
6. key:实际使用的索引
  • 作用key 表示 MySQL 实际使用的索引。MySQL 可能选择一个或多个索引来优化查询,key 显示了实际使用的索引名称。

    • 示例

       

      sql

      复制代码

      EXPLAIN SELECT * FROM employees WHERE department = 'Sales';

      返回:

      idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra
      1SIMPLEemployeesrangedept_salarydept_salary4NULL500Using where
      • key = dept_salary,表示查询实际使用了 dept_salary 索引。
7. key_len:索引长度
  • 作用key_len 显示 MySQL 使用的索引的长度(单位为字节)。这个值帮助你了解查询操作使用了多少字节来扫描索引。通常情况下,key_len 反映了索引中使用的字段个数。

    • 示例

       

      sql

      复制代码

      EXPLAIN SELECT * FROM employees WHERE department = 'Sales' AND salary > 50000;

      返回:

      idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra
      1SIMPLEemployeesrangedept_salarydept_salary8NULL500Using where
      • key_len = 8 表示查询使用了一个长度为 8 字节的索引。
8. ref:连接条件
  • 作用ref 表示连接时的条件,或者表示使用某个常量或字段与表中的列进行匹配。这个字段通常用于多表连接查询,表示连接条件的值。

    • 示例
       

      sql

      复制代码

      EXPLAIN SELECT * FROM employees e JOIN departments d ON e.department_id = d.id;

      返回:
      idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra
      1SIMPLEemployeesrefdept_id_idxdept_id_idx4const500Using where
      2SIMPLEdepartmentseq_refPRIMARYPRIMARY4e.department_id1NULL
9. rows:扫描的行数
  • 作用rows 估算 MySQL 查询时扫描的行数。这个值是一个估算值,基于表的大小、索引的选择和查询条件的复杂性。

    • 示例

       

      sql

      复制代码

      EXPLAIN SELECT * FROM employees WHERE department = 'Sales';

      返回:

      idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra
      1SIMPLEemployeesrangedept_salarydept_salary4NULL500Using where
      • rows = 500,表示 MySQL 预计扫描 500 行数据。
10. Extra:附加信息
  • 作用Extra 列包含查询执行过程中附加的操作信息。它为优化查询提供了额外的信息,帮助我们判断是否有进一步优化的空间。

    • 常见值

      • Using where:查询使用了 WHERE 条件过滤。
      • Using temporary:查询需要使用临时表(例如在 GROUP BYORDER BY 中)。
      • Using filesort:查询使用了文件排序,可能意味着性能问题。
      • Using index:查询仅使用索引,不需要扫描表。
      • Using join buffer:使用了连接缓存。
    • 示例

       

      sql

      复制代码

      EXPLAIN SELECT * FROM employees WHERE department = 'Sales';

      返回:

      idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra
      1SIMPLEemployeesrangedept_salarydept_salary4NULL500Using where
      • Extra = Using where,表示查询中包含了 WHERE 条件。

通过上面详细的描述,你可以清楚地知道每个字段的作用及其对查询优化的影响。了解 EXPLAIN 输出的每个细节,能够帮助你优化 SQL 查询和数据库设计。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/493065.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍06-基于子查询的SQL注入(Subquery-Based SQL Injection)

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…

Moretl开箱即用日志采集

永久免费: 至Gitee下载 使用教程: Moretl使用说明 使用咨询: 用途 定时全量或增量采集工控机,电脑文件或日志. 优势 开箱即用: 解压直接运行.不需额外下载.管理设备: 后台统一管理客户端.无人值守: 客户端自启动,自更新.稳定安全: 架构简单,兼容性好,通过授权控制访问. 架…

Go框架比较:goframe、beego、iris和gin

由于工作需要,这些年来也接触了不少的开发框架,Golang的开发框架比较多,不过基本都是Web"框架"为主。这里稍微打了个引号,因为大部分"框架"从设计和功能定位上来讲,充其量都只能算是一个组件&…

DB-GPT 智谱在线模型配置

LLM_MODELzhipu_proxyllm PROXY_SERVER_URLhttps://open.bigmodel.cn/api/paas/v4/chat/completions ZHIPU_MODEL_VERSIONglm-4 ZHIPU_PROXY_API_KEY70e8ec7113882ff5478fcecaa47522479.ExY2LyjcvWmqrTAf

【GCC】2015: draft-alvestrand-rmcat-congestion-03 机器翻译

腾讯云的一个分析,明显是看了这个论文和草案的 : 最新的是应该是这个 A Google Congestion Control Algorithm for Real-Time Communication draft-ietf-rmcat-gcc-02 下面的这个应该过期了: draft-alvestrand-rmcat-congestion-03

python:用 sklearn 构建线性回归模型,并评价

编写 test_sklearn_6.py 如下 # -*- coding: utf-8 -*- """ 使用 sklearn 估计器构建线性回归模型 """ import numpy as np import pandas as pd import matplotlib.pyplot as plt from matplotlib import rcParamsfrom sklearn import dataset…

系统思考—战略共识

当企业不增长的时候,是忙着救火,还是在真正解决问题? 最近遇到很多领导者,把精力放在“管理”上,希望通过抓细节提升效率,解决经营问题。结果呢?全公司上上下下忙成了一团乱麻,但不…

web3跨链桥协议-Nomad

项目介绍 Nomad是一个乐观跨链互操作协议。通过Nomad协议,Dapp能够在不同区块链间发送数据(包括rollups),Dapp通过Nomad的合约和链下的代理对跨链数据、消息进行验证、传输。其安全通过乐观验证机制和欺诈证明制约验证者实现&…

微信小程序实现画板画布自由绘制、选择画笔粗细及颜色、记录撤回、画板板擦、清空、写字板、导出绘图、canvas,开箱即用

目录 画板创建canvas绘制及渲染画笔粗细功能实现画笔颜色选择画笔痕迹撤回、板擦、画布清空canvas解析微信小程序中 canvas 的应用场景canvas 与 2D 上下文、webgl 上下文的关系图像的加载与绘制说明代码说明画板创建 canvas绘制及渲染 在wxml添加对应的canvas标签代码,并在j…

网站灰度发布?Tomcat的8005、8009、8080三个端口的作用什么是CDNLVS、Nginx和Haproxy的优缺点服务器无法开机时

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默, 忍不住分享一下给大家。点击跳转到网站 学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……) 2、学会Oracle数据库入门到入土用法(创作中……) 3、手把…

解锁BL后的K40降级

1 下载刷机工具 https://miuiver.com/miflash/ 2、下载刷机包 https://xiaomirom.com/series/ 下载ROM包,12.0.8比较好 3 打开第一步下载的刷机工具 打开首次安装驱动, 接下来先选择个重要的东西,如果不想重新上BL那就选择全部删除…

蓝桥杯刷题——day8

蓝桥杯刷题——day8 题目一题干解题思路代码 题目二题干解题思路代码 题目一 题干 N 架飞机准备降落到某个只有一条跑道的机场。其中第i架飞机在 Ti时刻到达机场上空,到达时它的剩余油料还可以继续盘旋 Di个单位时间,即它最早可以于 Ti时刻开始降落&am…

redis数据类型:list

list 的相关命令配合使用的应用场景: 栈和队列:插入和弹出命令的配合,亦可实现栈和队列的功能 实现哪种数据结构,取决于插入和弹出命令的配合,如左插右出或右插左出:这两种种方式实现先进先出的数据结构&a…

IDEA中解决Edit Configurations中没有tomcat Server选项的问题

今天使用IDEA2024专业版的时候,发现Edit Configurations里面没有tomcat Server,最终找到解决方案。 一、解决办法 1、打开Settings 2、搜索tomcat插件 搜索tomcat插件之后,找到tomcat 发现tomcat插件处于未勾选状态,然后我们将其勾选保存即可。 二、结果展示 最后,再次编…

复习打卡大数据篇——Hadoop HDFS 02

目录 1. HDFS辅助工具 2. namenode安全模式 1. HDFS辅助工具 跨集群数据拷贝 当我们需要跨集群进行文件数据的拷贝时可以用: hadoop distcp 集群1的某个文件路径 要拷贝到集群2的地址路径 文件归档工具archive 由于HDFS的块的数量取决于文件的大小和数量&…

Mamba安装环境和使用,anaconda环境打包

什么是mamba Mamba是一个极速版本的conda,它是conda的C重新实现,使用多线程并行处理来加速包和依赖项的下载。 Mamba旨在提高安装、更新和卸载Python包的速度,同时保持与conda相同的兼容性和命令行接口。 Mamba的核心部分使用C实现&#xff…

Sigrity System Explorer Snip Via Pattern From Layout模式从其它设计中截取过孔模型和仿真分析操作指导

Sigrity System Explorer Snip Via Pattern From Layout模式从其它设计中截取过孔模型和仿真分析操作指导 Sigrity System Explorer Snip Via Pattern From Layout模式支持从其它设计中截取过孔模型用于仿真分析,同样以差分模板为例 具体操作如下 双击打开System Explorer软件…

顺序表的操作

注意位序和数组下标的关系 插入: 插入的时间复杂度: 最深层语句: 最好情况 最坏情况 平均情况 删除: 查找:

以腾讯混元模型为例,在管理平台上集成一个智能助手

背景 前几天,公司的同事们一起吃了个饭,餐桌上大家聊到大模型的落地场景。我个人在去年已经利用百度千帆平台写过案例,并发过博客(传送门👉:利用文心千帆打造一个属于自己的小师爷)&#xff0c…

计算机基础 试题

建议做的时候复制粘贴,全部颜色改为黑色,做完了可以看博客对答案。 一、单项选择题(本大题共25小题,每小题2分,共50分〉 1.计算机内部采用二进制数表示信息,为了便于书写,常用十六进制数表示。一个二进制数0010011010110用十六进制数表示为 A.9A6 B.26B C.4D6 D.…