首页 > 安全资讯 >

MYSQL-explain(面试必问题)

17-08-10

MYSQL-explain(面试必问题)。EXPLAIN Output columns

EXPLAIN Output columns

目测面试必问吧。

列名 说明
id 执行编号,标识select所属的行。如果在语句中没子查询或关联查询,只有唯一的select,每行都将显示1.否则,内存select语句一般会顺序编号,对应于其在原始语句的位置
select_type 显示本行是简单或复杂select。如果查询有仍和复杂的子查询,则最外层标记为PRIMARY(DERIVED,UNION,UNION RESULT)
table 访问引用哪个表(引用某个查询,如“Lion”)
type 数据访问/读取操作类型(ALL,index,range,ref,eq_ref,const/system),NULL
possible_keys 揭示哪一些索引可能有利于高效的查找
key 显示mysql决定采用哪个索引来优化查询
key_len 显示mysql在索引的字节数
ref 显示了之前的表在key列疾苦的索引中查找值所有的列或常量
rows 为了找到所需的行而需要读取的行数,估算值(不精确)。通过把所有rows列值相乘,可粗略估计整个查询会检查的行数
Extra 额外信息,如using index、filesort等

无索引的user表
这里写图片描述

id
id是用来顺序标识整个查询中SELECT语句的,在嵌套查询中id越大的语句越先执行。

select_type
标识查询的类型

类型 说明
simple 简单子查询,不包含子查询和union
primary 包含union或者子查询,最外层标记为primary
subquery 一般子查询中的子查询被标记为subquery,也就是位于select列表中的查询

table
正在访问哪一个表,表名或者别名

type
type显示的是访问类型,时较为重要的一个指标,结果值从好到坏依次是:
system/const>eq_ref>ref>fulltext>ref_or_null>index_merge>unique_subquery>index_subquery>range>index>ALL

一个cvte面试问题:
type中什么是最快的访问结果?(面试官问我key中最快,,)
面试官告诉我答案是const。

possible_keys
显示查询使用了哪些索引,表示该索引可以进行高效地查找,但是列出来的索引对于后续优化过程可能是没有用的

key
key列显示MySQL实际决定使用的键(索引)。

key_len
显示MSQL决定使用的建长度。

ref
显示哪个列或长度与key一起从表中选择行。

rows
查询的行数。估计值

Extra

类型 说明
Using filesort MySQL有两种方式可以生成有序的结果,通过排序操作或者使用索引,当Extra中出现了Using filesort 说明MySQL使用了后者,但注意虽然叫filesort但并不是说明就是用了文件来进行排序,只要可能排序都是在内存里完成的。大部分情况下利用索引排序更快,所以一般这时也要考虑优化查询了。使用文件完成排序操作,这是可能是ordery by,group by语句的结果,这可能是一个CPU密集型的过程,可以通过选择合适的索引来改进性能,用索引来为查询结果排序。
Not exists MYSQL优化了LEFT JOIN,一旦它找到了匹配LEFT JOIN标准的行, 就不再搜索了。
Using index 说明查询是覆盖了索引的,不需要读取数据文件,从索引树(索引文件)中即可获得信息。如果同时出现using where,表明索引被用来执行索引键值的查找,没有using where,表明索引用来读取数据而非执行查找动作。这是MySQL服务层完成的,但无需再回表查询记录。
Using where 使用了WHERE从句来限制哪些行将与下一张表匹配或者是返回给用户。注意:Extra列出现Using where表示MySQL服务器将存储引擎返回服务层以后再应用WHERE条件过滤。

相关文章
最新文章
热点推荐