mysql里的explain介绍
来自尚硅谷视频
Explain关键字:可以模拟优化器,执行SQL查询语句。
语法: explain +SQL语句
Explain作用:查看表的读取顺序
数据读取操作的操作类型
哪些索引可以使用
哪些索引被实际使用
表之间的引用
每张表有多少行被优化器查询
Explain包含的表头:
id: select 查询的序列号,包含一组数字
id相同:从上而下执行
id 不同:数字大的先执行。
select_type:数据读取操作的操作类型
simple:简单select查询,查询中不包含子查询或union
primary:查询中若包含复杂的子部分,最外层则被标记为primary
subQuery:在from 或where列表中包含子查询
union:若第二个select查询出现在union之后,则被标记为union
若union包含在from子句的子查询中,外层的select将被标记为 Derived
union Result:从union中获取数据
type:显示查询使用了何种类型
从最好到最差
system>const>eq_ref>ref>range>index>all
实际开发中至少达到range级别 最好到ref级别
system:表中只有一行记录
const:通过索引一次就查到
eq_ref:唯一性索引扫描,表中只有一条记录与之匹配
ref:返回匹配某个值的所有行(查找和扫描的混合体)
range:只检索给定范围的行。
possible_keys:显示可能应用在这张表中的索引,一个或多个
key:实际使用的索引。
如果为null :没有使用索引
索引失效
key_len:表示索引中使用的字节数,长度约短越好
key_len并非索引名的实际长度。而是根据表定义计算得出。
ref:显示索引的哪一列被使用(索引列的值被引用)
rows:每张表有几条记录被优化器查询。
Extra:包含不适合在其他列中显示,但十分重要的额外信息。
using filesort: mysql中无法利用索引完成排序操作(需要优化SQL)
using temporary:使用临时表保存中间结果。(急需优化SQL)
MySql在对查询结果进行排序时使用临时表。
常见排序:order by 和分组查询 group by
using index:同时出现using where 表明索引被用来执行索引键值查找(SQL写的很棒)
没有出现using where 表明索引用来读取数据,而非执行查找操作
using where:使用了where 过滤
using join buffer:使用了缓存
impossible where:where 里的字段赋值有歧义。