本文共 1690 字,大约阅读时间需要 5 分钟。
在MySQL数据库中,使用EXPLAIN
或DESC
关键字可以查看查询执行计划,这是优化慢查询的重要手段。通过执行计划,我们可以深入了解查询的执行过程、性能瓶颈以及优化方向。
以下是执行计划中的10个关键参数及其详细解释:
SELECT
语句的位置。id=1
表示这是查询中第一个被执行的SELECT
语句。SIMPLE
:没有子查询的简单查询。PRIMARY
:主查询,通常与PRIMARY KEY
相关。UNION
:用于合并两个或多个结果集的查询。DEPENDENT UNION
:与另一个查询相关联的UNION
操作。UNION RESULT
:UNION
操作的结果集。SUBQUERY
:包含子查询的查询。DEPENDENT SUBQUERY
:与主查询相关联的子查询。DERIVED
:未直接使用WHERE
或HAVING
子句的查询。table="school"
表示查询的表是school
。system
:涉及系统表或其他特殊处理。const
:只返回常数值的结果。eq_ref
:使用等式引用索引来定位行。ref
:使用索引列来定位行。ref_or_null
:类似ref
,但允许返回NULL
值。index_merge
:使用索引合并来优化查询。unique_subquery
:使用唯一约束执行子查询。index_subquery
:使用索引执行复杂的子查询。range
:按范围查询索引列。index
:使用索引进行查找。ALL
:表示查询方式最慢,通常用于强制从所有行读取数据。possible_keys="index_col1,index_col2"
表示可用索引为index_col1
和index_col2
。key="index_col1"
表示实际使用了index_col1
索引。key_len=5
表示索引的长度为5。ref="prefix"
表示使用了prefix
列的值来定位行。rows=10
表示从表中检验了10行数据。Distinct
:返回不同的记录。Not exists
:检查不存在的记录。range checked for each record (index map)
:使用范围检查索引。Using filesort
:对结果集进行排序。Using index
:使用索引优化查询。Using temporary
:使用临时表存储结果。Using where
:使用WHERE
子句过滤数据。Using sort_union(...), Using union(...), Using intersect(...)
:对结果集进行并集或交集操作。Using index for group-by
:在GROUP BY
中使用索引。SIMPLE
PRIMARY
UNION
DEPENDENT UNION
UNION RESULT
SUBQUERY
DEPENDENT SUBQUERY
DERIVED
system
const
eq_ref
ref
ref_or_null
index_merge
unique_subquery
index_subquery
range
index
ALL
通过理解和分析这些参数,我们可以更好地识别查询的性能问题,并采取相应的优化措施。
转载地址:http://ybdfk.baihongyu.com/