1.基础
解释:sql执行计划(是SQL在数据库中执行时的表现情况,通常用于SQL性能分析,优化
等场景。)
使用:
explain + sql (mysql5.6之后开始支持select外delete、insert
、update)
问题:查看explain时应该关注哪些信息?
*type:查询类型
*key:命中的索引
*rows:扫描的行数
*extra:额外信息,例如:useing index 使用覆盖索引
概念引入:
*覆盖索引:表示索引包含了返回所有的列,不需要回表。
*回表查询:查询返回了非索引字段,需要通过聚集索引(主键索引)找到对应的
数据行。
*非回表查询:查询返回索引字段,不需要回表查询。
2.执行结果分析
2.1 id
每个号码表示一趟独立的查询,一个sql的查询趟数越少越好。
如果不同趟数的id一样,则表的读取顺序是从上到下。
如果不同趟数的id不一样,id大的先执行,小的后执行。
2.2 select_type,查询类型,表明是普通查询、联合查询或子查询等
以下为常用的一些类型,以及对应的情况:
*SIMPLE:简单的select查询没有union或子查询,包括单表查询和多表join查询
*PRIMARY:常见于子查询或union查询,最外层的查询被标识为primary
*UNION:union操作之后的select,不依赖于外部查询的结果集。
*SUBQUERY:子查询中的第一个select查询,不依赖于外部查询的结果集
*DEPENDENT SUBQUERY:子查询中第一个select查询,依赖于外部查询结果集
*DERIVED:派生表(临时表),常用于from子句中有子查询的情况。
2.3 table,显示访问的表,当表定义别名后则显示别名。
2.4 type,关联类型,表明了mysql是如何查找符合条件的行的。
*ALL:全表扫描
*ref:索引访问,索引查找
2.5 possible_key,显示sql中可能命中的索引,但查询时不一定使用。
2.6 key,显示sql中命中的索引,没有时显示null。
2.7 预计查询到结果需要扫描的数据行数。
2.8 Extra,显示一些额外的信息
定义:用于提供一些额外的信息
*useing index:表示使用了覆盖索引,索引中包含所查询的所有列。
*useing index useing where:
*null:查询的列未被索引覆盖,但是where条件使用了索引,需要通过回表查询
*useing where:提醒我们mysql将用where子句过滤结果集。