您的位置:首页 > 数据库 > MySQL

MySQL使用explain查看执行计划

2016-06-14 16:38 501 查看
CoderGO: MySQL使用explain查看执行计划

explain可以显示MySQL对于语句的执行计划,在5.6以及以后的版本中,除过select,其他比如insert,update和delete均可以使用explain查看执行计划。

extended关键字:在explain后使用extended关键字,可以显示filtered列和warning信息,更多查看mysql文档:http://dev.mysql.com/doc/refman/5.7/en/explain-extended.html

partitions关键字:显示查询将访问的分区,如果你的查询是基于分区表。

id列
查询的编号,没有子查询,均为1,有子查询则会编号。

select_type列
两种大类,简单查询(simple)与复杂查询(subquery(select列表中的子查询),derived(from子句中的子查询),union(union第二个和随后的select))

table列
显示了对应行正在访问哪个表或者其别名。

type列
关联的类型,或者说是访问类型

all
全表扫描。

index
全表扫描,扫描时按索引排序而不是行。避免了排序,但仍然要进行全表扫描。按照随机次序访问行,开销非常 大。

range
有限制的范围扫描。

ref
索引查找,返回所有匹配某个单值的行。可能找到多个符合条件的行,查找和扫描的混合体。只有使用非唯一性索引或者唯一性索引的非唯一前缀时才发生。 索引需要和某个参考值相比较,参考值可以是一个常数,或者来自多表查询前一个表中的结果值。

eq_ref
最多返回一个符合条件的记录,可以在MySQL中使用主键或唯一性索引查找时看到,

const, system
当MySQL可以对某部分优化将其转换为一个常量时,则其会使用这些访问类型。

NULL
MySQL可以在优化阶段分解查询语句,执行阶段不用访问表或者索引。

possible_keys

显示查询时可以使用哪些索引,基于查询访问的列或和使用的比较操作符来判断的。在查询的优化过程的早期创建的,因此只是一个估计。

key列

显示了MySQL使用哪个索引优化表的访问,如果它没有出现在possible_keys中,则mysql选择它可能有其他原因,如可能选择索引覆盖。

key_len

显示了索引字段中可能的最大长度,不是表中数据使用的实际字节数。key_len通过查找表的定义而计算,并不是表中的数据。

ref

显示查询文本中表所使用的常量或者列。

rows

估计找到结果所用读取的行数。

filtered

使用explain extended时显示,显示针对表里符合某个条件(where子句或者联结条件)的记录数的百分比所做的一个悲观估算,即mysql将要过滤行数的百分比。

extra

额外信息

using index
显示MySQL将使用索引覆盖访问数据。

using where
MySQL服务器将在存储引擎检索行后进行过滤,

using temporary
MySQL对结果排序时会使用临时表。

using filesort
MySQL会对结果进行外部排序。

Rang checked for each record (index map:N)
没有好用的索引,新的索引将在联结的每一行上重新估算。N显示在possible_keys列中索引的位图。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: