千家信息网

MySQL查询优化工具explain介绍

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,下文主要给大家带来MySQL查询优化工具explain,希望这些内容能够带给大家实际用处,这也是我编辑这篇文章的主要目的。好了,废话不多说,大家直接看下文MySQL查询优化工具explain吧。在日常
千家信息网最后更新 2026年11月02日MySQL查询优化工具explain介绍

下文主要给大家带来MySQL查询优化工具explain,希望这些内容能够带给大家实际用处,这也是我编辑这篇文章的主要目的。好了,废话不多说,大家直接看下文MySQL查询优化工具explain吧。

在日常的MYSQL优化中我们常常看到这样一个关键词:explain,例如这种:

EXPLAIN SELECT * FROM Cloud_Order WHERE money > 10;

explain是什么呢?使用 EXPLAIN 关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。这可以帮你分析你的查询语句或是表结构的性能瓶颈。通过explain命令可以得到:

  1. 表的读取顺序

  2. 数据读取操作的操作类型

  3. 哪些索引可以使用

  4. 哪些索引被实际使用

  5. 表之间的引用

  6. 每张表有多少行被优化器查询


首先让我们来看看使用EXPLAIN输入的结果

结果显示输出了结果一堆字段和对应的值,但是这些字段是什么意思?对应的值又是什么呢?如何通过这些字段来分析到SQL的性能并做出优化呢?别急,下面我们就一起来一一分析。

EXPLANIN字段分析

  • id : SELECT识别符。这是SELECT的查询序列号


  • 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:这是最重要的字段之一,显示查询使用了何种类型。从最好到最差的连接类型为system、const、eq_reg、ref、range、index和ALL。下面给出各种类型,按照从最佳类型到最坏类型进行排序:


    ·system、const:可以将查询的变量转为常量. 如id=1; id为 主键或唯一键.


    ·eq_ref:访问索引,返回某单一行的数据.(通常在联接时出现,查询使用的索引为主键或惟一键)


    ·ref:访问索引,返回某个值的数据.(可以返回多行) 通常使用=时发生


    ·range:这个连接类型使用索引返回一个范围中的行,比如使用>或<查找东西,并且该字段上建有索引时发生的情况(注:不一定好于index)


    ·index:以索引的顺序进行全表扫描,优点是不用排序,缺点是还要全表扫描


    ·ALL:全表扫描,应该尽量避免


  • possible_keys:显示可能应用在这张表中的索引。如果为空,没有可能的索引。可以为相关的域从WHERE语句中选择一个合适的语句


  • key:实际使用的索引。如果为NULL,则没有使用索引。MYSQL很少会选择优化不足的索引,此时可以在SELECT语句中使用USE INDEX(index)来强制使用一个索引或者用IGNORE INDEX(index)来强制忽略索引


  • key_len:使用的索引的长度。在不损失精确性的情况下,长度越短越好


  • ref:显示索引的哪一列被使用了,如果可能的话,是一个常数


  • rows:MySQL认为必须检索的用来返回请求数据的行数


  • filtered:显示了通过条件过滤出的行数的百分比估计值。


  • Extra:关于MYSQL如何解析查询的额外信息,主要有以下几种


    ·Distinct:MySQL发现第1个匹配行后,停止为当前的行组合搜索更多的行。


    ·range checked for each record (index map: #):MySQL没有发现好的可以使用的索引,但发现如果来自前面的表的列值已知,可能部分索引可以使用。


    ·Using index:只用到索引,可以避免访问表.


    ·Using tmporary:用到临时表


    ·Using where:使用到where来过虑数据. 不是所有的where clause都要显示using where. 如以=方式访问索引.


    ·Using filesort:MySQL需要额外的一次传递,以找出如何按排序顺序检索行。

explain实践

说了这么多,实践才能出真知。下面我们通过一个简单的例子来优化我们一些不堪的SQL。
首先我们还是一张数据表举例。表结构如下。

这是一张典型的订单表,其他字段我们可以省略不看,我们可以只看一个money字段,这基本是订单表都会用到的字段。由于时间关系,事先我已经为这个表准备了一堆模拟数据。


从上图可以看出,表中已经有一万条数据,下面我们来写一个根据money条件来查询订单的SQL。

只能说上图的结果不尽人意。让我们回到之前explain字段的分析,其中type字段的值是ALL,按照分析来说,这个表用了全表搜索,我们应尽量避免!!!再看rows字段,值是16242,天啊!!所有记录都去请求了,那慢是有原因的。

好了,通过上面的数据分析,我们可以去想一下,money字段是否能加上索引来提升查询速度呢?因为上述结果中好像是没用到索引的。话不多说,我们来为money字段加上索引

加上索引之后,我们再用刚刚的EXPLAIN语句执行一下,见证奇迹的时候到了!

经过加上索引之后,相同的sql语句,得出的结果完全不一样,type字段变成了range,我们也看到key显示了money,证明了索引值被用上了。更重要的是rows字段变成了785,跟原来相比少了不知道多少,可想而知性能有了多大的提高!

对于以上关于MySQL查询优化工具explain介绍,大家是不是觉得非常有帮助。如果需要了解更多内容,请继续关注我们的行业资讯,相信你会喜欢上这些内容的。

索引 查询 字段 数据 语句 类型 结果 分析 工具 内容 实际 性能 订单 这是 顺序 排序 重要 上图 下文 关键 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 科技互联网 广东猪兼强互联网科技有限公司 北京互联网科技有限公司 易互联网科技有限公司 凡科互联网科技 互联网科技上市公司 天速互联网络科技有限公司 互联网科技项目计划书材料类 互联网为啥属于高科技 互联网与医疗科技 国大互联网教育科技有限公司工作 互联网科技和法律行业 四川慕妮娅互联网科技有限公司 中和天地互联网科技有限公司 山东有哪些互联网科技公司 山东星卡互联网科技有限公司官网 互联网领先科技宣传片 江苏互联网科技小贷 广州互联网高科技取餐柜 互联网科技手抄报图片 互联网是第几次科技革命的成果 互联网科技工作委员会主任 科技制造互联网公司 贵州叶脉互联网科技有限公司所属行业 武汉健翔互联网络科技有限公司 开一家科技互联网公司需要多少钱 迪庆互联网科技招生 21世纪互联网科技成就 兰石爱特工业互联网科技分公司 如何强化互联网金融科技
0