MySQL优化之Explain
文章目录
逻辑架构和Explain
逻辑体系架构
Explain
结果分析
逻辑架构和Explain
通过MySQL的逻辑架构我们可以了解一条命令从发送到结果之间的经历,而Explain关键字对命令在逻辑架构中是如何被优化并执行这一问题给出了更细致的诠释。
逻辑体系架构
Connectors:客户端与MySQL之间的交互链接。
Management Serveices & Utilities:系统管理和控制工具。
Connection Pool:数据库连接池,维护多个客户端连接,提高交互效率。
SQL Interface:接收用户命令的接口。
Parser:解析命令的有效性,得到命令的具体行为。
Optimizer:对将进行的查询过程进行优化,目的使用最少的IO得出符合要求的结果。
Cache & Buffer:缓存查询结果集,避免对相同数据的多次IO操作。
Pluggable Storage Engines:存储引擎接口,允许对存储引擎的任意切换。
Explain
Explain关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理该语句的。其语法如下:
EXPLAIN 查询语句
结果分析
EXPLAIN将返回执行查询语句时按什么顺序读取数据表、哪些索引可以使用、表之间的引用等详细信息,通过这些信息我们可以分析出查询语句是否应该优化,以及如何优化。从而提高语句的执行效率。
id(表的读取顺序):
如果结果的id值相同,那么将由上至下的读取对应的数据表。
如果是子查询,id值会递增,值越大优先级越高,对应的表越先被读取。
select_type(读取类型):
SIMPLE:简单查询。
PRIMARY:包含子查询语句的最外层查询。
SUBQUERY:子查询。
DERIVED:FROM列表中包含的子查询。
UNION:联合查询中一部分。
UNION RESULT:联合查询组成的结果集。
table(对应的数据表)
type(访问类型):
system:表只有一行记录。
const:对主键或唯一键字段进行扫描,且结果只匹配一行记录。
eq_ref:连接查询时使用主键或唯一键字段作为连接条件。
ref:对非唯一键索引字段进行扫描。
range:对索引字段进行指定范围内的扫描。
index:遍历索引树。
all:遍历数据表。
possible_keys(可能索引):
列出查询中涉及到的索引,但不一定是被实际使用到的。
key(实际使用索引)
key_len(索引使用字节数)
ref(索引列查询条件中所引用的列或常量)
rows(得出结果预计需要扫描的行数)
Extra(额外信息)
Using filesort:无法利用索引进行排序(索引无效),因此使用外部排序,会降低查询效率。
Using temporary:需要使用临时表对结果进行处理,常见于排序、分组查询,会降低查询效率。
Using index:查询中使用了覆盖索引,即SELECT列中仅指定了索引字段,效率较高。
Using where:查询中使用了WHERE查询条件。
Using join buffer:查询中使用了连接缓存。
impossible where:查询中使用了WHERE查询条件,且该条件的结果始终为false。
本文作者:张三Blog
本文链接:https://www.cnblogs.com/zhangsan-plus/p/16503337.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步