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

【MySQL】EXPLAIN(执行计划)关键字是什么?

简介:

        explain是一个强大的 SQL 命令,用于分析和优化查询性能。通过查看数据库执行计划,我们可以理解查询是如何被处理的,包括表的访问顺序、使用的索引、连接类型等。这对于找到潜在的性能瓶颈非常重要。

 

目录

一、基本含义

二、解析执行计划


一、基本含义

        当我们在SQL查询前加上explain关键字时,它会给我们返回一张表,其中包含查询的执行计划信息,分别解释一下列值的含义:

1、id:查询的标识符,代表查询的顺序(1、2说明1先执行,2后执行)

 2、select_type:查询的类型。如①SIMPLE 简单查询 ②PRIMARY主查询 ③SUBQUERY子查询

 3、table:查询中涉及到的表名

4、type:连接类型,表示MySQL如何查找表中的行,常见类型有:

        ①ALL:全表扫描,可能导致性能变差

        ②INDEX:索引扫描,表ALL快,但仍会扫描所有索引。

        ③range:范围扫描,仅扫描匹配的行。

        ④ref:通过非唯一索引或者唯一索引查找所匹配的行。

        ⑤eq_ref:通过主键或唯一索引查找所匹配的行,效率较高。

        ⑥const:通过主键查找的常量值,效率最优。

5、possible_keys:查询可能使用的索引。

6、key:实际使用的索引。

7、key_len:使用的索引长度。有助于判断是否使用了合适的索引。

8、ref:显示哪些列或常量与key值匹配。

9、rows:估算需要读取的行数,以获取最终结果。

10、Extra:其他信息。例如使用临时表或文件排序等。

二、解析执行计划

1、检查连接类型:

        1.1:优先使用ref、eq_ref、const类型,这都是些高效率的连接方式。

        1.2:避免使用ALL,这会扫描全表索引,显著降低sql性能。

2、查看使用的索引:

        2.1:检查 possible_keys 列,查看是否有合适的索引可用。

        2.2:确保 possible_keys 列显示了有效的索引,并且key_len足够的短,尽可能提高效率

3、评估rows:

        在rows列中查看预估读取的行数,较小的数字意味着更好的性能。

4、注意其他信息:

        在 Extra 列中,特别是Using temporary 或 Using filesort 。这通常表明查询的性能受到了影响,需要我们去排查。 

三、实际的应用

1、优化查询

2、性能监控:定期使用explain 监控 复杂查询,确保它们没有随着表中数据量的增加而降低效率

3、调试问题:性能不如预期时,通过explain查看。

示例:

a表name加上普通索引

b表age字段加上普通索引 

 通过explain执行计划查看详细信息:

  由此看出,表a通过索引快速定位数据,没有进行全表扫描(ALL)

表b使用了等值连接(eq_ref),有效利用了主键索引。此时我们的索引使用情况是正常的。

http://www.lryc.cn/news/435744.html

相关文章:

  • Mybatis两种方式来调用sql语句
  • 第十八节:学习统一异常处理(自学Spring boot 3.x的第五天)
  • flink中slotSharingGroup() 的详解
  • ASPF 技术介绍
  • 77-java 装饰器模式和适配器模式区别
  • 5. Fabric 设置画布大小
  • 240912-通过Ollama实现网站知识总结
  • Debian 包管理工具apt使用
  • 如何模拟一个小程序项目打包的流程
  • 设计模式七大原则详解
  • Navicat On-Prem Server 2.0 | MySQL与MariaDB基础管理功能正式上云
  • 汽车车门的美观与功能:矫平工艺的精细修复
  • 【Python】05.Python 中的列表与元组
  • 【Go】十五、分布式系统、Consul服务注册发现、Nacos配置中心搭建
  • [Linux#48][网络] 令牌环网 | IPv4 | socket 套接字 | TCP | UDP | 网络字节序列
  • Mac OS14外接显示器字体过小和放大字体模糊问题的简单解决
  • Python-pptx:如何在幻灯片中轻松插入与填充表格
  • ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost:3306‘ (10061)
  • MySQL优化策略(大数据量)
  • 在Excel里制作简单游戏界面
  • 火语言RPA流程组件介绍--鼠标拖拽元素
  • 计算机三级网络技术总结 第十一章网络管理技术
  • 「豆包 Marscode 体验官」AI 加持的云端 IDE——三种方法高效开发前后端聊天交互功能
  • 基于Linux文件编程实现处理Excel表格的数据
  • make 程序规定的 makefile 文件的书写语法(2)
  • 容器化安装jenkins稳定版长期维护版本LTS
  • 如何让人工智能训练更快
  • linux/ubuntu国内镜像安装gitleaks敏感信息扫描工具教程及避坑点
  • JavaScript高级程序设计基础(二)
  • 使用Spring Boot开发自习室预定系统