面试题答案
一键面试- id:
- 表示查询中执行select子句或操作表的顺序。
- 如果id相同,执行顺序从上到下。
- 如果id不同,id值越大,优先级越高,越先执行。
- select_type:
- SIMPLE:简单的SELECT查询,不包含子查询或UNION。
- PRIMARY:如果查询包含任何复杂的子部分,最外层的查询被标记为PRIMARY。
- SUBQUERY:在SELECT或WHERE子句中包含的子查询。
- DERIVED:在FROM子句中包含的子查询,MySQL会将其处理为临时表,也称为派生表。
- UNION:在UNION中的第二个或后面的SELECT语句。
- UNION RESULT:表示从UNION临时表检索结果的阶段。
- table:
- 显示这一行的数据是关于哪张表的。如果是连接查询,会按照连接顺序依次显示各个表。对于子查询,可能显示为
<derivedN>
,其中N是派生表的编号;对于临时表,可能显示为<unionM,N>
,其中M和N是UNION操作中涉及的select_type对应的id。
- 显示这一行的数据是关于哪张表的。如果是连接查询,会按照连接顺序依次显示各个表。对于子查询,可能显示为
- partitions:
- 表示匹配的分区。如果查询不涉及分区表,该列显示为NULL。
- type:
- ALL:全表扫描,MySQL需要扫描全表来找到匹配的行。这是性能最差的一种类型。
- index:索引全扫描,和ALL类型类似,只不过扫描的是索引树。通常比ALL快,因为索引文件通常比数据文件小。
- range:范围扫描,只检索给定范围的行,使用一个索引来选择行。例如,WHERE条件中使用了BETWEEN、<、>、IN等操作符。
- ref:使用非唯一索引扫描,通过索引查找与某个值匹配的所有行。通常出现在使用了普通索引(非唯一索引)的查询中。
- eq_ref:对于每个来自于前面的表的行组合,从该表中读取一行。这可能是最好的连接类型,除了const类型。通常出现在主键或唯一索引的等值连接中。
- const:表最多有一个匹配行,因为它是基于常量的查询。例如,将主键或唯一索引列与常量值比较时会出现这种类型。
- system:system是const类型的特例,表只有一行记录(等于系统表)。
- possible_keys:
- 显示可能应用在这张表上的索引。查询优化器会根据这些索引来选择执行计划。如果该列为NULL,则没有可用的索引。
- key:
- 显示MySQL实际决定使用的索引。如果为NULL,表示没有使用索引。
- key_len:
- 表示MySQL决定使用的索引长度。通过这个值可以判断索引使用的情况,如果该值越接近索引字段的最大长度,说明索引使用得越充分。
- ref:
- 显示索引的哪一列或常量被用来和key列指定的索引进行比较。例如,如果是const,表示和常量值比较;如果是其他表的列名,表示和其他表的该列进行比较。
- rows:
- 显示MySQL认为它执行查询时必须检查的行数。该值是一个预估值,并不一定准确,但可以作为查询性能的一个参考。
- filtered:
- 表示存储引擎返回的数据在server层过滤后,剩下满足查询条件的记录数量的比例。值越大越好,100表示所有返回的行都通过了过滤条件。