数据
聚焦技术和人文,分享干货,共同成长。
聚焦技术和人文,分享干货,共同成长。
EXPLAIN
或EXPLAIN ANALYZE
语句来查看执行计划。-- 基本的EXPLAIN语句
EXPLAIN SELECT * FROM users JOIN orders ON users.id = orders.user_id WHERE users.age > 20;
-- EXPLAIN ANALYZE可以提供更详细的执行信息
EXPLAIN ANALYZE SELECT * FROM users JOIN orders ON users.id = orders.user_id WHERE users.age > 20;
id
id
相同,则从上往下依次执行;如果id
不同,id
值越大越先执行。EXPLAIN SELECT *
FROM (SELECT id FROM users WHERE age > 20) subquery
JOIN orders ON subquery.id = orders.user_id;
id
值可能会比外层查询大,意味着子查询会先执行。select_type
SIMPLE
:简单查询,不包含子查询或 UNION 操作。PRIMARY
:主查询,包含子查询的外层查询。SUBQUERY
:子查询。DERIVED
:派生表查询,即使用子查询作为临时表的查询。UNION
:UNION 操作中的第二个及后续查询。UNION RESULT
:UNION 操作的结果集。EXPLAIN SELECT *
FROM users
WHERE id IN (SELECT user_id FROM orders);
select_type
为PRIMARY
,子查询的select_type
为SUBQUERY
。table
users
和orders
表名。partitions
NULL
。type
system
:表中只有一行记录,是const
类型的特例。const
:通过索引一次就找到匹配的记录,通常用于主键或唯一索引的等值查询。eq_ref
:多表连接时,对于前一个表的每一行,后一个表只通过索引查找一条记录,常用于主键或唯一索引的连接查询。ref
:使用非唯一索引或索引前缀进行查找,返回匹配某个单独值的所有行。range
:只检索给定范围的行,使用索引来选择行,常见于WHERE
子句中的BETWEEN
、>
、<
等操作。index
:全索引扫描,扫描整个索引树来获取数据。ALL
:全表扫描,性能最差。EXPLAIN SELECT * FROM users WHERE id = 1; -- 可能是const类型
EXPLAIN SELECT * FROM users WHERE age > 20; -- 可能是range类型
possible_keys
key
NULL
,则表示没有使用索引。key_len
ref
rows
filtered
Extra
Using where
:表示使用了WHERE
子句进行过滤。Using index
:表示使用了覆盖索引,即查询只需要访问索引,不需要访问表的数据行。Using temporary
:表示 MySQL 需要使用临时表来存储中间结果,常见于GROUP BY
和ORDER BY
操作。Using filesort
:表示 MySQL 需要使用文件排序,这通常意味着查询的性能可能会受到影响。possible_keys
和key
列的信息,检查是否使用了合适的索引。如果key
为NULL
,可能需要创建索引来提高查询性能。type
为ALL
的情况,可以通过创建索引、优化查询条件等方式来减少全表扫描。Extra
列中出现Using temporary
或Using filesort
,可以通过调整查询语句、创建合适的索引等方式来避免。4180版本的是 8079 0500 0f94 c2
改为:c641 0501 b200 90
服务器的硬件时间比系统时间快100年,使用hwclock -w这个命令无法同步,大佬有别的可建议的命令吗
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)