explain各个字段的意思转载
原创1)、id列中的数字越大,首先执行的次数就越多。如果数字相同,则从上到下执行,id列为null该表是不需要用于查询结果集的。
2)、select_type常见的列有:
A:simple:表示否union操作简单或不包含子查询。select查询。当存在连接查询时,外部查询为。simple而且只有一个
B:primary:一个需要union操作或子查询select,位于最外面的单位查询中。select_type即为primary。而且只有一个
C:union:union这两个相连的人select查询,第一个查询是dervied派生表,除第一个表、第二个后面的表之外select_type都是union
D:dependent union:与union相同,出现在union 或union all语句,但此查询受外部查询的影响。
E:union result:包含union在结果集中,union和union all语句中,因为它不需要参与查询,所以。id字段为null
F:subquery:除了from除了句子中包含的子查询外,其他地方出现的子查询可能是subquery
G:dependent subquery:与dependent union相似,表明这一点subquery该查询受外部表查询的影响。
H:derived:from出现在句子中的子查询也称为派生表,可以称为内联视图或嵌套在其他数据库中。select
3)、table
显示的查询表名称。如果查询使用别名,则别名将在此处显示。如果不涉及对数据表的操作,则会显示以下内容null,如果显示为尖括号
4)、type
从好到坏:system,const,eq_ref,ref,fulltext,ref_or_null,unique_subquery,index_subquery,range,index_merge,index,ALL,除了all此外,其他type可以用来索引、。index_merge此外,其他type只能使用一个索引
A:system:该表只有一行数据或一个空表,并且只能使用myisam和memory桌子。如果Innodb引擎表,type在这种情况下列出的通常是。all或者index
B:const:使用唯一索引或主键,返回的记录必须为1相当于行记录。where条件,通常是type是const。其他数据库也称为唯一索引扫描。
C:eq_ref:在连接表的查询计划中,DRIVER表只返回一行数据,该行数据是第二个表的主键或唯一索引,并且必须是not null、唯一索引和主键是多列,仅当所有列都用于比较时eq_ref
D:ref:不像eq_ref这需要连接顺序,并且没有主键和唯一索引的要求,只要使用相等条件搜索就可以发生,公共索引和辅助索引是等价的搜索。或者在主键和唯一索引的多个列中,也将出现使用第一列以外的列作为等效查找。简而言之,可能会出现返回不唯一数据的等价查找。
E:fulltext:全文索引搜索,注意全文索引优先级高,如果全文索引和普通索引同时存在,mysql无论成本如何,都首选全文索引。
F:ref_or_null:与ref这种方法类似,只是null价值比较。实际使用的并不多。
G:unique_subquery:用于where中的in形式子查询时,子查询返回不重复值的唯一值。
H:index_subquery:用于in表单子查询使用辅助索引或。in常量列表中,子查询可能返回重复值,可以使用索引删除子查询。
I:range:索引范围扫描,常用。>,<,is null,between ,in ,like和查询中的其他运算符。
J:index_merge:表示查询使用两个以上的索引,并最终采用交集或并集、公共。and ,or在使用不同指标的情况下,官方对此进行了排序。ref_or_null之后,但实际上,由于读取所有索引,性能可能不会像大多数时间那样好。range
K:index:索引全表扫描,从头到尾扫描索引,常用的索引列可以处理不需要读取数据文件的查询,可以使用索引排序或分组查询。
L:all:这是完整的表格扫描数据文件,然后进入。server层过滤将返回符合要求的记录。
5)、possible_keys
此处列出了查询可能使用的索引。
6)、key
查询实际使用的索引,select_type为index_merge此处可能出现两个以上的索引,另一个。select_type这里只有一个人。
7)、key_len
用于处理查询的索引长度,如果它是单列索引,则包括整个索引长度,如果它是多列索引,则查询可能无法使用所有列,具体索引的列数,这里会计算,没有使用的列,这里不会计算。注意该列的值,并计算多列索引的总长度,以查看是否已使用了所有列。请注意,mysql的ICP不计算使用该属性的索引。此外,key_len只计算where条件使用的索引的长度,即使使用了索引,也不会计算排序和分组。key_len中。
8)、ref
如果是常量等价查询,则如下所示。const如果是连接查询,则受驱动表的执行计划将在此处显示受驱动表的关联字段;如果条件使用表达式或函数,或者如果条件列具有内部隐式转换,则可能会在此处显示。func
9)、rows
以下是执行计划中扫描线的估计数量,而不是确切的值。
10)、extra
这个栏目可以显示很多信息,有几十种,常用的
A:distinct:在select部分使用distinc关键字
B:no tables used:不带from对句子或的质疑。From dual查询
C:使用not in()表单子查询或not exists运营商连接查询,这称为反连接。也就是说,一般的连接查询是先查询内部表,再查询外观,反连接是先查询外观,再查询内部表。
D:using filesort:当在排序过程中不能使用索引时,会发生这种情况。常见于order by和group by语句中
E:using index:无需返回表进行查询,直接通过索引获取查询数据即可。
F:using join buffer(block nested loop),using join buffer(batched key accss):5.6.x更高版本优化了关联的查询。BNL,BKA特点。它主要是为了减少内部表的周期数和比较顺序扫描查询。
G:using sort_union,using_union,using intersect,using sort_intersection:
using intersect:表示使用and当每个索引的条件相同时,该信息指示交集是从处理结果中获得的。
using union:表示使用or当连接每个索引的条件时,该信息指示从处理结果获得并集。
using sort_union和using sort_intersection:与前两个相似,不同之处在于它们出现在使用中。and和or当查询信息量较大时,先查询主键,排序合并后再读取并返回记录。
H:using temporary:表示使用临时表存储中间结果。临时表可以是内存临时表和磁盘临时表,执行计划中看不到临时表,需要查看。status变量,used_tmp_table,used_tmp_disk_table去看看。
I:using where:表示并非存储引擎返回的所有记录都符合查询条件,需要在server用于过滤的层。查询条件分为限制条件和检查条件,5.6以前,存储引擎只能根据限制扫描数据并将其返回,然后server该层根据检查条件进行过滤,并返回与查询真正匹配的数据。5.6.x之后支持ICP功能上,还可以将检测条件下推到存储引擎层,不满足检测条件和限制的数据,直接不读,从而大大减少了存储引擎扫描的记录数量。extra列显示using index condition
J:firstmatch(tb_name):5.6.x开头介绍的优化子查询的新功能之一,在中很常见。where字句含有in()类型的子查询。如果表中的数据量相对较大,则可能会发生这种情况。
K:loosescan(m..n):5.6.x中介绍的优化子查询的新功能之一。in()在类型的子查询中,当子查询可能返回重复记录时,可能会发生这种情况。
除此之外,还有许多查询数据字典库,在计划执行过程中会发现一些没有结果的提示信息。
11)、filtered
使用explain extended此列将在下列情况下出现:5.7此字段在后续版本中默认可用,不需要使用。explain extended是。此字段表示存储引擎返回的数据在中。server在层过滤后,满足查询的剩余记录数的比例是百分比,而不是特定的记录数。
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除