逻辑架构和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 查询语句
1
结果分析
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。