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

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

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

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

相关文章:

  • 支持selenium的chrome driver更新到133.0.6943.141
  • Java 内存泄漏排查指南:工具与实战技巧
  • 【EB-06】SystemCreator dbc转arxml
  • 网络安全内参
  • Spring Boot启动过程?
  • C语言 第一章 认识C语言
  • HD接口 和HDMI接口是一个意思么
  • python-leetcode-划分字母区间
  • 子组件如何通过v-model实现数据的双向绑定
  • 互联网怎样利用人性-思维导图-markdown
  • Selenium 调用模型接口实现功能测试
  • C++ Primer 成员访问运算符
  • python学习五
  • 深入理解 并查集LRUCaChe
  • CUDA编程:对线程模型的理解
  • HDFS扩缩容及数据迁移
  • 使用 LangChain 和 Milvus 构建测试知识库
  • Instagram 的隐私政策更新:用户如何应对这些变化?
  • ARM32汇编 -- align 指令说明及示例
  • wordpress按分类ID调用最新、推荐、随机内容
  • 如何理解电子商务网站建设与管理/58同城安居客
  • 苏州手机网站seo/seo黑帽教程视频
  • 贵州省住房和城乡建设厅官方网站/竞价托管哪家便宜
  • 手机wap网站怎样从微信公众号打开/中牟网络推广
  • 天津市城市建设档案馆网站/seo具体seo怎么优化
  • 网站怎么提高收录/线上营销方式主要有哪些