mysql - EXPLAIN

Mysql

  1. EXPLAIN

    type(索引类型): system>const>eq_ref>ref>range>index>all
    system,const,eq_ref
    基本达不到的;

consts:仅仅能查到一条语句的sql,用于 主键索引,唯一索引(和索引类型有关)
eq_ref:唯一索引,对于每个索引的查询,返回匹配相等且唯一行的数据(只有一个,不能多,不能为0
ref:非唯一索引,对于每个索引键的查询,返回匹配的所有行的数据(可以多,可以为0
range:检索指定范围查询,where后面是一个范围查询 between,><,in(特俗情况会失效)
index:查询表中全部索引 select industry_id from lwl_insdutry;(industry_id 是索引)扫描索引表
all: 查询表中全部数据 扫描全表

show index form tables (查询tables表中的索引)

总结:

system/conts:结果就是一条,实际开发中基本很难实现;
eq_ref:结果多条,但每条都是唯一数据;
ref:结果多条,每条数据是0或者多条
  1. possible-keys:可能用到的索引,是一种预测,不准的

  2. key:实际使用到的索引

  3. key_len:索引长度:作用:判断复合索引是不是完全被使用

  4. ref:指明当前表 参照的字段
    例如:EXPLAIN SELECT * FROM lwl_articles a ,lwl_users u WHERE a.users_id = u.id and a.author = ‘lwl’
    在这里插入图片描述

    a表:外建users_id 加了索引,所以在u表中ref:是用到了users_id;
    a表:author 这个字段家了索引 ,所以a表中ref:是它的值 常量;

6.extra

(1).当出现 using filesort 效率极低 一半出现在 order by 语句中

  1. 例如:单索引数据表的情况下

    	表:user
    		字段:users_id, author;
    		索引:users_id, author;
    		![在这里插入图片描述](https://img-blog.csdnimg.cn/20200114171207961.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zNzY0NzU5Ng==,size_16,color_FFFFFF,t_70)
    		原因:由于 查询的字段仅仅查询了author字段,但是用的users_id字段排序,所以在查询出结果集后,还要再次查询users_id用于排序;------(单索引,避免数显以上多余查询情况下,查询字段要和排序字段相对应)
    
不友好:EXPLAIN select author FROM lwl_articles ORDER BY users_id ---Using filesort 
避免:EXPLAIN select author FROM lwl_articles ORDER BY author
查询什么字段,就用什么字段排序
  1. 复合索引(左前缀)

    表:demo
    	columns:id, name,age,sex
    	index(复合索引):name,age,sex
    
不友好:EXPLAIN select  name,sex FROM lwl_articles ORDER BY name,sex ---Using filesort 缺少 age,
不友好:EXPLAIN select  sex,name,age FROM lwl_articles ORDER BY sex,name,age ---Using filesort 缺少 顺序不对,
	避免:EXPLAIN select  name,age,sex FROM lwl_articles ORDER BY name,age,sex 
复合索引完全按照左前缀原则:name,age,sex 不可跨字段,无序

(2).当出现 using temporary 效率极低 一半出现在 group by,临时表

不友好:EXPLAIN select  sex FROM lwl_articles ORDER BY name ---Using temporary
避免:EXPLAIN select  sex FROM lwl_articles ORDER BY sex 
查询什么 就用什么分组

(3). 当出现:using index,性能提升,索引覆盖,仅仅只读取索引表,
例如:复合索引 name, age,sex

EXPLAIN select   name, age,sex FROM lwl_articles where  name=‘’, age=‘’,sex=‘’

(4). 当出现:using where,性能提升,索引没完全覆盖,不仅仅只读取索引表,还读取了数据表
例如:复合索引 name, age

EXPLAIN select   name, age FROM lwl_articles where  name=‘’, age=‘’,sex = ‘’
发布了21 篇原创文章 · 获赞 7 · 访问量 1407

猜你喜欢

转载自blog.csdn.net/weixin_37647596/article/details/103973620
今日推荐