MySQL认知__explain简介(下)

MySQL EXPLAIN详解
本文深入讲解MySQL中EXPLAIN的关键作用,解析SQL执行计划,包括possible_keys、keys、key_length等属性的意义,以及如何通过理解Extra列的信息来优化查询性能。

EXPLAIN的基本介绍

 关于MySQL的优化,我们首先要了解explain这个东西。explain能够帮助我们来查看我们所写的SQL的内部执行计划,包括是否使用索引、有没有做全表扫描等等,让我们能更好地了解自己编写的SQL。
 
我们深入了解MySQL的基于开销的优化器,可以获得很多可能被优化器考虑到的访问策略的细节,以及当我们编写的SQL在何种情况下不会被优化器所采用。

explain的用法

explain的用法:在我们要查询的SQL之前加上该关键字,注意要是查询SQL

用法如下所示:

EXPLAIN 
	SELECT * FROM iot_product_discount pd 
	WHERE pd.`id` = "7b8bab6e4d6c4e6ba4bfcac40349ca33";

explain语句结果
接上篇,这篇将继续介绍余下的属性
6. possible_keys

 possible_keys的意思为:MySQL能使用哪个索引在表中找到记录,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用。

 该列完全独立于EXPLAIN输出所示的表的次序。这意味着在possible_keys中的某些键实际上不能按生成的表次序使用。如果该列是NULL,则没有相关的索引。在这种情况下,可以通过检查where子句看是否它引用某些列或适合索引的列来提高你的查询性能。如果是这样,创造一个适当的索引并且再次用explain检查语句。

7.keys
 key列显示MySQL实际决定使用的键(索引)。
如果没有索引,键是NULL。想要强制MySQL使用或者忽略possible_keys列中的索引,在查询中使用FORCE_INDEX、USE INDEX或者IGNORE INDEX

8.key_length
 表示索引中使用的字节数,可通过该列计算查询中使用的索引长度(key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的)
在不损失精度的情况下,长度越短越好。

9.ref
 表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值。

10.rows
 表示MySQL根据表统计及索引选用情况,估算的找到所需的记录所需要读取的行数。
是个简单且重要的参考值,数值越大说明性能越差,说明没有用好索引。

11.Extra
该列包含MySQL解决查询的详细信息,有以下几种情况:

  • Using where
     列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,这发生在对表的全部请求列都是同一个索引,表示MySQL服务器将在存储引擎检索后再进行过滤。

Using where图
 我们可以和下面的Using index来做对比。两者的区别的是remark字段是非索引字段。

  • Using index
     列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,这发生在对表的全部请求列都是同一个索引,表示MySQL服务器将在存储引擎检索后再进行过滤。

 我们可以和上面的Using where来做对比。两者的区别的pool_no为索引字段。
Using index

  • Using temporary
     表示MySQL需要使用临时表来存储结果集,常见于排序和分组查询。出现该语句说明,是要考虑一下优化性能。

  • Using filesort
     MySQL中无法利用索引完成的排序操作成为文件排序

  • Using join buffer
     该值强调了在获取连接条件时没有使用索引,并且需要连接缓冲区来存储中间结果。如果出现了该值,那应该注意,根据查询的具体情况可能需要添加索引来改进性能。

  • Impossible where
     这个值强调了where语句会导致没有符合条件的行。

  • Select tables optimized away
     这个值意味着仅通过使用索引,优化器可能从聚合函数结果中返回一行。

总结

1. explain 不会告诉你关于触发器、存储过程的信息或用户自定义函数对查询的影响情况。
2.  explain 不会考虑到各种cache缓存。
3.  explain 不能显示MySQL在执行查询时所作的优化工作。
4.  部分统计信息是估值,并非精确值。
5.  explain只能解释select操作,其他操作要重写为select 后查看执行计划。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值