MySQL-Explain
用途
- Explain命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通过此命令来简单的解决。
- Explain可以用来查看SQL语句的执行效果,可以帮助选择更好的索引和优化查询语句,写出更好的优化语句。
用法
- Explain语法:
explain select … from … [where …] 例如:explain select * from news; 输出: +--+-----------+-----+----+-------------+---+-------+---+----+-----+ |id|select_type|table|type|possible_keys|key|key_len|ref|rows|Extra| +--+-----------+-----+----+-------------+---+-------+---+----+-----+
- 这里需要强调,rows是核心指标,绝大部分rows小的语句执行一定很快。所以优化语句基本上都是在优化rows
各字段详解
下面对各个属性进行了解:
-
id:SELECT的查询序列号。
- id如果相同,从上往下依次执行。id不同,id值越大,执行优先级越高,如果行引用其他行的并集结果,则该值可以为NULL。
-
select_type:select_type就是select的类型,可以有以下几种:
-
SIMPLE:简单SELECT(不使用UNION或子查询等)。
-
PRIMARY:最外面的SELECT。
-
UNION:UNION中的第二个或后面的SELECT语句。
-
DEPENDENT UNION:UNION中的第二个或后面的SELECT语句,取决于外面的查询。
-
UNION RESULT:UNION的结果。
-
SUBQUERY:子查询中的第一个SELECT。
-
DEPENDENT SUBQUERY:子查询中的第一个SELECT,取决于外面的查询。
-
DERIVED:导出表的SELECT(FROM子句的子查询)。
-
-
table:显示这一行的数据是关于哪张表的。
-
type(重要):这列最重要,显示了连接使用了哪种类别,有无使用索引,是使用Explain命令分析性能瓶颈的关键项之一。
结果值从好到坏依次是:
system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
一般来说,得保证查询至少达到range级别,最好能达到ref,否则就可能会出现性能问题。
-
possible_keys:列指出MySQL能使用哪个索引在该表中找到行。
-
key(重要):显示MySQL实际决定使用的键(索引)。如果没有选择索引,键是NULL。
-
key_len:显示MySQL决定使用的键长度。如果键是NULL,则长度为NULL。使用的索引的长度。在不损失精确性的情况下,长度越短越好。
-
ref:显示使用哪个列或常数与key一起从表中选择行。
-
rows:显示MySQL认为它执行查询时必须检查的行数。
-
Extra(重要):包含MySQL解决查询的详细信息,也是关键参考项之一。
-
Using index: 说明查询中使用了覆盖索引,即查询结果可以直接从索引中获取,而不需要额外访问数据行。
-
Using where: 表示MySQL将应用额外的WHERE条件来筛选行,这可能是因为查询中存在不可被索引覆盖的条件。
-
temporary: 表明MySQL需要创建一个临时表来处理查询,通常发生在执行GROUP BY或ORDER BY操作时。
-
Using filesort: 表示MySQL需要对结果集进行文件排序操作,这通常发生在无法利用索引进行排序时,或者在查询包含ORDER BY操作时。
-
Using join buffer (Block Nested Loop): 表明MySQL正在使用连接缓冲区来执行连接操作。
-
Range checked for each record (index map: N): 表示MySQL在索引中进行了范围检查,检查了每个记录以确定是否满足查询条件。
-
Full scan on NULL key: 表示MySQL正在执行全表扫描以查找具有NULL键的行。
-
Select tables optimized away: 表示MySQL优化了查询,直接从索引中获取了结果,而不需要访问表数据。
-
Impossible WHERE noticed after reading const tables: 表示MySQL在读取常量表后注意到了不可能的WHERE条件。
-
本文来自博客园,作者:ヾ(o◕∀◕)ノヾ,转载请注明原文链接:https://www.cnblogs.com/Jupiter-blog/p/18751114
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构