技术文摘
快速看懂 MySQL 执行计划,一篇文章就够了
快速看懂 MySQL 执行计划,一篇文章就够了
在 MySQL 数据库的优化过程中,执行计划是一个极为重要的工具,它能帮助我们深入了解数据库如何执行查询语句,从而针对性地进行性能优化。
要获取执行计划很简单,只需在 SQL 查询语句前加上 EXPLAIN 关键字即可。执行后,会返回包含多个列信息的结果。
第一个关键列是 id。它是一个标识符,用于区分不同的 SELECT 语句。如果查询中包含子查询或联合查询,id 值会呈现不同的层次结构,值越大,优先级越高,执行顺序越先。
接着是 select_type 列。常见的类型有 SIMPLE,表示简单查询,不包含子查询或联合查询;PRIMARY 代表最外层的查询;SUBQUERY 表示子查询;DERIVED 则是派生表,即从子查询中创建的临时表。了解这些类型,能清晰知晓查询的结构和执行顺序。
table 列显示了当前执行计划对应的表名。这让我们直观看到查询涉及哪些表。
type 列是评估查询性能的关键。常见的类型有 ALL,这是全表扫描,性能最差,意味着 MySQL 要遍历整个表来查找符合条件的行;index 也是全索引扫描,虽然比 ALL 快些,但同样要扫描整个索引;range 是范围扫描,通过索引范围查找,性能较好;ref 表示使用非唯一索引进行等值查询;const 则用于常量查询,性能最优,因为查询结果只有一行。
possible_keys 和 key 列分别显示了可能使用的索引和实际使用的索引。如果 possible_keys 有索引,但 key 为空,说明 MySQL 没有选择合适的索引,需要进一步优化。
key_len 列表示实际使用索引的长度。它能帮助我们判断索引使用的效率。
最后,rows 列估算了 MySQL 为了执行查询需要扫描的行数。数值越小,通常意味着查询性能越好。
掌握这些执行计划的关键信息,就能快速分析 MySQL 查询的性能瓶颈,通过合理创建索引、优化查询语句等手段,大幅提升数据库的运行效率。
- 2021 年 Python 软件包的正确发布方式
- Python 中常见的 5 种反模式
- Idea 插件:实现快速 JSON 转对象
- 深度剖析立即执行函数
- 一个 Excel 导入与校验工具的封装,获同事一致好评
- 云函数 Todo 重构与 Vue 客户端调用
- Serverless 开发实战:Todo 案例解析
- 22 个实用的 JavaScript 单行代码
- 五一将至,未买到票的朋友试试这个
- 这 7 个 Vue 开发必备的 VS Code 插件,不容错过!
- .NET WebSocket 核心原理初探
- Semaphore 自白:限流器选我没错!
- SonarQube 分析代码与漏洞查找的方法
- 利用 Google 的 protobuf 思考、设计与实现自身 RPC 框架的方法
- 调查:86%的 Java 开发者倚重 Spring 框架