欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL执行计划

程序员文章站 2022-06-01 22:19:29
...

查询执行计划:

explain +SQL语句
explain select * from tb ;

id 编号
select_type 查询类型
table
type 类型
possible_keys 预测用到的索引
key 实际用到的索引
key_len 索引长度
ref 表之间的引用
rows 通过索引查询到的数据量
Extra 额外信息

规则

  • id: id值相同,从上往下 顺序执行。
  • 数据小的表 优先查询;
  • id值不同:id值越大越优先查询(本质:在嵌套子查询时,先查内层 再查外层)

type:索引类型

system>const>eq_ref>ref>range>index>all
其中:system,const只是理想情况;实际能达到 ref>range

system
只有一条数据的系统表 ;或 衍生表只有一条数据的主查询

explain select * from (select * from test01 )t where tid =1 ;

test01表中只有一条数据
const
仅仅能查到一条数据的SQL ,用于Primary key 或unique索引

explain select tid from test01 where tid =1 ;

eq_ref
唯一性索引:对于每个索引键的查询,返回匹配唯一行数据(有且只有1个,不能多 、不能0)
select … from …where name = … .常见于唯一索引 和主键索引。

explain select t.tcid from teacher t,teacherCard tc where t.tcid = tc.tcid ;

以上SQL,用到的索引是 t.tcid,即teacher表中的tcid字段;
如果teacher表的数据个数 和 连接查询的数据个数一致(都是3条数据),则有可能满足eq_ref级别;否则无法满足。
ref
非唯一性索引,对于每个索引键的查询,返回匹配的所有行(0,多)

explain select * from teacher 	where tname = 'tz';

range
检索指定范围的行 ,where后面是一个范围查询(between ,> < >=, 特殊:in有时候会失效 ,从而转为 无索引all)

explain select t.* from teacher t where t.tid in (1,2) ;
explain select t.* from teacher t where t.tid <3 ;

index
查询全部索引中数据

explain select tid from teacher ; 

tid 是索引, 只需要扫描索引表,不需要所有表中的所有数据
all
查询全部表中的数据

explain select cid from course ;  

cid不是索引,需要全表所有,即需要所有表中的所有数据

总结:
system/const: 结果只有一条数据
eq_ref:结果多条;但是每条数据是唯一的 ;
ref:结果多条;但是每条数据是是0或多条 ;

相关标签: SQL