MySQL执行计划是通过`EXPLAIN`或`EXPLAIN ANALYZE`命令生成的,它提供了SQL查询的执行信息,帮助我们分析和优化查询性能。以下是执行计划中各个字段及其含义的详细解释:
1. **id**:Query Optimizer所选定的执行计划中查询的序列号。如果多个行有相同的ID,它们属于同一个查询的一部分,并且按照从上到下的顺序执行。
2. **select_type**:显示本行是简单或复杂select。常见的值有:
- SIMPLE:最简单的select查询语句。
- PRIMARY:包含子查询的最外层查询。
- SUBQUERY:select或where列表中包含的子查询。
- DERIVED:from子句中的子查询。
- UNION:出现在UNION后的select。
- UNION RESULT:从UNION的临时表中读取数据。
3. **table**:显示这一步所访问的数据库中的表的名称,可能是别名,也可能是临时表或union合并结果集。
4. **partitions**:查询时匹配到的分区信息,对于非分区表值为NULL。
5. **type**:数据访问、读取操作类型,性能从好到坏依次是:system > const > eq_ref > ref > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL。
6. **possible_keys**:该查询可以利用的索引,如果没有任何索引可以使用,就会显示成null。
7. **key**:MySQL Query Optimizer从possible_keys中所选择使用的索引。
8. **key_len**:被选中使用索引的索引键长度。
9. **ref**:列出是通过常量(const),还是某个表的某个字段(如果是join)来过滤(通过key)的。
10. **rows**:MySQL Query Optimizer通过系统收集到的统计信息估算出来的结果集记录条数。
11. **filtered**:表示存储引擎返回的数据在经过过滤后,剩下满足条件的记录数量的比例。
12. **Extra**:查询中每一步实现的额外细节信息,如:
- Using index:表示查询使用了覆盖索引。
- Using temporary:表示需要使用临时表来存储中间结果。
- Using filesort:表示需要额外的排序操作。
- Using where:表示使用了where条件来过滤结果。
通过分析这些字段,我们可以了解MySQL如何执行SQL查询,以及可能的性能瓶颈,从而进行相应的优化。
标签:index,解析,查询,索引,MySQL,Using,执行,select From: https://www.cnblogs.com/wang-xiaohui/p/18599058