MySQL Explain命令参数参考

当你在MySQL中执行一条查询语句时,可以使用"EXPLAIN"关键字来获取查询执行计划的详细信息。下面是"EXPLAIN"输出结果中常见字段的详细解释:

  • id:标识查询中每个操作步骤的唯一标识符。
  • select_type:指示了查询的类型,如简单查询、子查询或联接查询等。
    1. SIMPLE:表示简单查询,不包含子查询或联接操作。
    2. PRIMARY:表示最外层的查询。
    3. SUBQUERY:表示在SELECT列表或WHERE子句中的子查询。
    4. DERIVED:表示从子查询派生出的临时表。
    5. UNION:表示UNION操作的第二部分或后续部分。
    6. UNION RESULT:表示UNION操作的结果。
    7. DEPENDENT UNION:表示UNION子查询中依赖于外部查询的部分。
    8. DEPENDENT SUBQUERY:表示子查询中依赖于外部查询的部分。
    9. DEPENDENT UNION RESULT:表示依赖于外部查询的UNION操作的结果。
    10. MATERIALIZED:表示使用了MATERIALIZED(材料化)技术的子查询。
    11. UNCACHEABLE SUBQUERY:表示无法缓存的子查询。
  • table:表示查询操作涉及的表名。
  • partitions:表示查询扫描的分区数。
  • type:表示访问表的方式,常见的有"ALL"、“index”、“range”、"ref"等。
    1. const: 表示通过索引一次就能找到匹配的唯一行数据,通常针对主键或唯一索引的等值查询。
    2. eq_ref: 表示使用等值连接,对于每个索引键,只有一条匹配的行数据,通常用于多表连接中连接条件为主键或唯一索引的查询。
    3. ref: 表示使用非唯一索引或唯一索引的前缀来查找匹配的行数据,返回多个匹配的行。
    4. range: 表示使用索引范围进行扫描,只检索给定范围内的行数据。
    5. index: 表示进行全索引扫描,遍历整个索引树。
    6. all: 表示全表扫描,需要遍历整个表进行查询。
    7. system: 表示只有一行数据(系统表),这是特殊情况的一种。
    8. unique_subquery: 表示子查询的结果使用了唯一索引进行查询。
    9. index_subquery: 表示子查询的结果使用了索引进行查询。
    10. range_checked_for_each_record : 表示根据上一个表的行数据进行范围搜索。
  • possible_keys:表示MySQL可能用到的索引列表。
  • key:表示实际使用的索引。
  • key_len:表示索引的长度。
  • ref:指示索引的比较条件或者是连接使用的键。
  • rows:表示估计需要检查的行数。
  • filtered:表示通过索引进行查询的比例。
  • Extra:显示额外的信息,如使用了临时表、文件排序等。
    1. Using index:表示查询使用了覆盖索引,即只通过索引就能满足查询需求,无需回表访问实际数据行。
    2. Using where:表示在查询过程中使用了WHERE子句进行条件过滤。
    3. Using temporary:表示在查询过程中使用了临时表。通常发生在排序、分组或多表联接时。
    4. Using filesort:表示进行了文件排序操作,无法通过索引直接进行排序。
    5. Using join buffer:表示使用了连接缓存来处理联接操作。
    6. Distinct:表示使用了DISTINCT关键字去重查询结果。
    7. Full scan on NULL key:表示执行一个索引上的全表扫描,在索引列上的所有值都为NULL时发生。
    8. Impossible WHERE:表示WHERE子句的条件总是返回false,因此不会返回任何行。
    9. Select tables optimized away:表示查询中的某些表被优化器判断为不需要访问,结果直接从索引中获取。
    10. No tables used:表示查询不涉及任何表,仅执行常数计算。
    11. Using sort_union:表示在UNION操作的结果集上进行排序。
    12. Using intersect:表示使用了INTERSECT操作。

你可能感兴趣的:(mysql,mysql,android,数据库)