MySQL 中如何查看 SQL 的执行计划?

ops/2025/2/27 15:09:27/

SQL 语句前面使用 EXPLAIN 关键字:

EXPLAIN SELECT * FROM users WHERE id = 1;

字段

含义

id

查询的序号(如果是子查询或联合查询,会有多个 id)。

select_type

查询的类型(简单查询、子查询、联合查询等)。

table

查询涉及的表名。

partitions

查询时使用的分区(如果表有分区)。

type

查询的访问类型(性能从高到低:system> const> eq_ref> ref> range> index> ALL)。

possible_keys

可能使用的索引。

key

实际使用的索引。

key_len

使用的索引长度。

ref

使用的索引与哪些列或常量进行比较。

rows

估算的扫描行数。

filtered

计算结果集占扫描行数的百分比(MySQL 5.7+)。

Extra

额外信息(如 Using whereUsing indexUsing temporary 等)。


EXPLAIN 的关键字段详解

type:表示 MySQL 如何访问数据,性能从高到低排序。

  • system:表中只有一行数据(系统表)。
  • const:通过主键或唯一索引查询,结果只有一行。
  • eq_ref:在连接查询中,主键或唯一索引被使用,返回最多一行。
  • ref:使用非唯一索引查询,返回匹配的多行。
  • range:使用索引进行范围查询(如 BETWEENIN)。
  • index:全索引扫描(比全表扫描快,但仍需遍历索引)。
  • ALL:全表扫描(性能最差)。

Extra:提供查询的额外信息

  • Using where:查询使用了 WHERE 条件。
  • Using index:使用了覆盖索引(无需回表)。
  • Using temporary:使用了临时表(常见于排序或分组)。
  • Using filesort:使用了文件排序(性能较低)。
  • Using join buffer:使用了连接缓存(多表连接时)。

如何分析 EXPLAIN 结果

通过 EXPLAIN 结果,可以优化查询:

1.检查 type

  • 目标是使用 consteq_refrefrange
  • 避免 ALL(全表扫描)。

2.检查 key

    • 确保查询使用了索引。
    • 如果没有使用索引,考虑添加合适的索引。

3.检查 rows

  • 估算的扫描行数越少越好。
  • 如果行数过多,优化查询条件或索引。

4.检查 Extra

  • 避免 Using temporaryUsing filesort
  • 尽量使用 Using index

水平有限,如有错误,欢迎指正!


http://www.ppmy.cn/ops/161709.html

相关文章

使用快捷键高效管理 VSCode:提升工作效率,告别鼠标操作

如果你想提高工作效率,减少鼠标操作,掌握键盘快捷键是一个非常有效的方式。在编程过程中,熟练使用快捷键能够快速管理文件、标签页,节省时间并提升效率。比如,Ctrl P 和 Ctrl W 可以快速打开和关闭文件,而…

centos9之ESXi环境下安装

一、centos9简介 CentOS Stream 9是一个基于RHEL(Red Hat Enterprise Linux)的开源操作系统。它是CentOS Stream系列的最新版本。CentOS Stream是一个中间发行版,位于RHEL和Fedora之间,旨在提供更及时的软件更新和新功能。CentOS …

刚充值Deepseek账号,但接入官方的API却遇到了问题【VSCode Cline Cursor Deepseek deepseek-reasoner】

本文解决以下疑难杂症: 使用deepseek的最新接模型接入ide 使用deepseek的最新接模型接入vscode 使用deepseek的最新接模型接入vscode中的Cline 使用deepseek的最新接模型接入Cline 使用cursor接入Deepseek官方的的deepseek-reasoner模型api,而不是使用cursor p…

WSL2下,向github进行push时出现timeout的问题

昨晚在完成15445 Project2.2后,笔者兴致冲冲地准备把代码提交到github上,谁知一连提交几次都出现 ssh:connect to host github.com port 22: Connection timed out 这个问题。我开始还以为是网络波动,测试了多次之后才发现应该是22端口出问题…

【苍穹外卖】问题笔记

【DAY1 】 1.VCS找不到 好吧,发现没安git 接着发现安全模式有问题,点开代码信任此项目 2.导入初始文件,全员爆红 好像没maven,配一个 并在设置里设置好maven 3.启用注解,见新手苍穹 pom.xml改lombok版本为1.1…

【DeepSeek-R1背后的技术】系列十一:RAG原理介绍和本地部署(DeepSeekR1+RAGFlow构建个人知识库)

【DeepSeek-R1背后的技术】系列博文: 第1篇:混合专家模型(MoE) 第2篇:大模型知识蒸馏(Knowledge Distillation) 第3篇:强化学习(Reinforcement Learning, RL)…

将VsCode变得顺手好用(1

目录 设置中文 配置调试功能 提效和增强相关插件 主题和图标相关插件 创建js文件 设置中文 打开【拓展】 输入【Chinese】 下载完成后重启Vs即可变为中文 配置调试功能 在随便一个位置新建一个文件夹,用于放置调试文件以及你未来写的代码,随便命名但…

OpenAPI Generator:API开发的瑞士军刀

一、工具介绍 OpenAPI Generator是基于OpenAPI规范(Swagger)的代码生成工具,支持50种编程语言的客户端/服务端代码生成。其核心价值在于: 自动化生成⇒减少重复劳动规范API开发流程 核心能力矩阵: 功能支持示例客户端SDK生成Java/Python/T…