mysql之explain用法
一、使用方法:EXPLAIN +sql语句;
EXPLAIN SELECT * FROM t1;
二、功能:EXPLAIN 是什么?查看表的执行计划
三、详解: EXPLAIN 能干嘛?
(1)表的读取顺序
(2)数据读取操作的操作类型
(3)哪些索引可以使用
(4)哪些索引被实际使用
(5)表之间的引用
(6)每张表有多少行被优化器查询
explain输出解释:
+----+-------------+-------+-------+-------------------+---------+---------+-------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+-------------------+---------+---------+-------+------+-------+
一.id:select查询的序列号,表示执行表的先后顺序。
(1).id相同时,执行顺序是由上至下。
EXPLAIN SELECT t2.* FROM t3,t1,t2 WHERE t2.m_id=t1.m_id AND t2.m_id=t3.m_id;
执行结果:
(2)id不同时,序号越大,优先级越高,越被优先执行,
EXPLAIN SELECT t2.* FROM t2 WHERE m_id=(SELECT m_id FROM t1 WHERE m_id=(SELECT m_id FROM t3 WHERE t3.m_id=5));
(3)id相同不同同时存在时,值越大越先执行,值相同的由上而下执行
EXPLAIN SELECT t2.* FROM (SELECT t3.m_id FROM t3 ) s1,t2 WHERE s1.m_id =(SELECT m_id FROM t1 WHERE t1.m_id=5);
二、select_type(数据读取的操作类型)
示查询中每个select子句的类型
(1) SIMPLE(简单SELECT,不使用UNION或子查询等)
(2) PRIMARY(子查询中最外层查询,查询中若包含任何复杂的子部分,最外层的select被标记为PRIMARY)
(3) UNION(UNION中的第二个或后面的SELECT语句)
(4) DEPENDENT UNION(UNION中的第二个或后面的SELECT语句,取决于外面的查询)
(5) UNION RESULT(UNION的结果,union语句中第二个select开始后面所有select)
(6) SUBQUERY(子查询中的第一个SELECT,结果不依赖于外部查询)
(7) DEPENDENT SUBQUERY(子查询中的第一个SELECT,依赖于外部查询)
(8) DERIVED(派生表的SELECT, FROM子句的子查询)
(9) UNCACHEABLE SUBQUERY(一个子查询的结果不能被缓存,必须重新评估外链接的第一行)
三、type类型
代表访问类型,MySQL内部将其分为多类型,常用的类型从好到差的顺序展示如下:
system->const->eq_ef->ref->fulltext->ref_or_null->index_merge->unique_subquery->index_subquery->range->index->ALL;
而在实际开发场景中,比较常见的几种类型如下:const->eq_ref->ref->range->index->ALL(顺序从好到差),通常优化至少在range级别或以上,比如ref算是比较不错的啦;
上面说到的从好到差指的是查询性能。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通