MySql教程

mysql的explain关键字

本文主要是介绍mysql的explain关键字,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

首先介绍一下mysql的explain关键字,explain关键字用于分析sql语句的执行情况,可以通过他进行sql语句的性能分析。explain的作用包括:(1)可以查看表的读取顺序;(2)可以查看数据读取操作的操作类型;(3)可以查看哪些索引可以使用;(4)可以查看哪些索引被实际使用;(5)可以查看表与表之间的引用关系;(6)可以查看每张表有多少行记录被优化器查询。基本使用形式是在需要测试的语句前面机上关键字即可,explain select * from table
在这里插入图片描述
id:查询序号,也就是查询的执行顺序。id值越大,优先级越高。如果id值相同表示语句是自上而下的执行。
select_type:sql语句的查询类型,主要用于区别普通查询,联合查询,子查询等的复杂查询。
simple:简单的select查询,查询中不包含子查询或者UNION;
primary:查询中若包含任何复杂的子部分,最外层查询被标记;
subquery:在select或where列表中包含了子查询;
derived:在from列表中包含的子查询,MySQL会递归执行这些子查询,把结果放到临时表中;
union:如果第二个select出现在UNION之后,则被标记为UNION,如果union包含在from子句的子查询中,外层select被标记为derived;
union result:union的结果,也就是联合查询的结果。
table: 查询语句中使用的表。
type:连接类型,显示查询使用了何种类型
system:表中仅有一行,这是const联结类型的一个特例。
const:表示通过索引一次就找到,const用于比较primary key或者unique索引。因为只匹配一行数据,所以如果将主键置于where列表中,mysql能将该查询转换为一个常量
eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。常见于唯一索引或者主键扫描
ref:非唯一性索引扫描,返回匹配某个单独值的所有行,本质上也是一种索引访问,它返回所有匹配某个单独值的行,可能会找多个符合条件的行,属于查找和扫描的混合体
range:只检索给定范围的行,使用一个索引来选择行。key列显示使用了哪个索引,一般就是where语句中出现了between,in等范围的查询。这种范围扫描索引扫描比全表扫描要好,因为它开始于索引的某一个点,而结束另一个点,不用全表扫描。
index:index 与all区别为:index类型只遍历索引树。通常比all快,因为索引文件比数据文件小很多。
all:遍历全表以找到匹配的行
possible_keys:显示可能应用到这张表的索引,有一个或者多个;查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询实际用到。。
key:MySQL实际决定使用的键(索引)。实际使用的索引,如果该值为NULL,则没有使用索引;如果查询中使用了覆盖索引,则该索引仅出现在key列表中。覆盖索引是指select后面的字段都具备索引,提高了查询效率,前提顺序、个数都要一致;
key_len:MySQL决定使用的键长度。如果键是NULL,则长度为NULL。使用的索引的长度。在不损失精确性的情况下,长度越短越好。key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表计算定义而得,不是通过表内检索出的。
ref:显示使用哪个列或常数与key一起从表中选择行。
rows:显示select语句检索的行数,也就是说这个sql语句检索了这么多行才找到符合条件的记录。
Extra:包含MySQL解决查询的详细信息,也是关键参考项之一。
Distinct:一旦MYSQL找到了与行相联合匹配的行,就不再搜索了
Not exists:MYSQL 优化了LEFT JOIN,一旦它找到了匹配LEFT JOIN标准的行,就不再搜索了
Record:没有找到理想的索引,因此对于从前面表中来的每一 个行组合,MYSQL检查使用哪个索引,并用它来从表中返回行。这是使用索引的最慢的连接之一
Using filesort:看到这个的时候,查询就需要优化了。MYSQL需要进行额外的步骤来发现如何对返回的行排序。它根据连接类型以及存储排序键值和匹配条件的全部行的行指针来 排序全部行
Using index:列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,这发生在对表 的全部的请求列都是同一个索引的部分的时候
Using temporary:看到这个的时候,查询需要优化了。这 里,MYSQL需要创建一个临时表来存储结果,这通常发生在对不同的列集进行ORDER BY上,而不是GROUP BY上
Using where:使用了WHERE从句来限制哪些行将与下一张表匹配或者是返回给用户。如果不想返回表中的全部行,并且连接类型ALL或index, 这就会发生,或者是查询有问题

这篇关于mysql的explain关键字的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!