EXPLAIN是MySQL查询优化的核心工具,通过分析执行计划中的type、key、rows、Extra等字段,可识别全表扫描、索引失效、排序与临时表等性能瓶颈,进而指导索引优化、SQL重写和配置调整,实现查询性能的显著提升。

EXPLAIN命令是MySQL查询优化的核心工具,它能帮我们揭示SQL语句在数据库内部是如何被执行的,从而找到性能瓶颈。如果你想让你的MySQL查询飞起来,理解并善用EXPLAIN是绕不过去的一步。它就像一个X光机,能透视查询的骨架,让我们看清哪些地方出了问题,哪些地方还有优化的空间。
要使用EXPLAIN命令,很简单,只需在你的
SELECT
EXPLAIN
EXPLAIN SELECT * FROM users WHERE age > 25 AND city = 'New York';
我个人觉得,初次接触EXPLAIN时,这张表格可能会让人有点望而却步,因为它包含了
id
select_type
table
partitions
type
possible_keys
key
key_len
ref
rows
filtered
Extra
当我拿到一个EXPLAIN结果时,我的目光通常会先落在几个关键字段上,它们往往能快速暴露问题。
type
type
system
const
eq_ref
ref
range
WHERE id BETWEEN 10 AND 100
index
ALL
ALL
key
key_len
key
NULL
key_len
(col1, col2, col3)
key_len
col1
col1
col2
col3
rows
filtered
rows
filtered
rows
filtered
rows
filtered
rows
filtered
Extra
Using filesort
ORDER BY
GROUP BY
Using temporary
GROUP BY
DISTINCT
UNION
Using index
Using where
type
ALL
Using where
Block Nested Loop
Batched Key Access
Block Nested Loop
在我的实际工作中,EXPLAIN经常能帮助我发现一些看似不起眼,实则影响巨大的性能陷阱。
全表扫描(type: ALL
SELECT * FROM large_table WHERE non_indexed_column = 'value'
ALL
ALL
WHERE
LIKE '%value%'
ALL
Using filesort
Using temporary
SELECT * FROM orders ORDER BY order_date DESC LIMIT 100;
order_date
Using filesort
GROUP BY
DISTINCT
Using temporary
Using filesort
Extra
子查询的性能陷阱: 虽然SQL语法上子查询很方便,但在某些情况下,它们可能导致性能问题。EXPLAIN可以帮助我们识别子查询是否被优化为
MATERIALIZED
DEPENDENT SUBQUERY
JOIN
JOIN
隐式类型转换: 这是一个非常隐蔽的陷阱。比如,
WHERE string_column = 123
string_column
ALL
range
key
NULL
EXPLAIN不是一次性的魔法,它是一个持续迭代的工具。我的优化过程通常是这样的:
type
rows
filtered
Extra
WHERE a = ? AND b = ?
INDEX(a, b)
INDEX(b, a)
WHERE
OR
UNION ALL
UNION
type
rows
filtered
Extra
Using filesort
Using temporary
我曾经有一个查询,它在一个有千万级记录的订单表上执行,每次都要跑几十秒。EXPLAIN显示它在一个日期范围查询上使用了
range
rows
filtered
Extra
Using filesort
ORDER BY
(order_date, customer_id)
ORDER BY
type
range
rows
filtered
Using filesort
以上就是使用EXPLAIN命令深度解析MySQL查询执行计划的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号