mysql explain详解(索引部分内容)

索引搜索变快,但是增删改会变慢

索引本身也要占空间

存在*.myini中的

介绍一款工具

Explain 

这是一款分析工具,可以对一个sql语句进行分析,可以预测sql语句执行效率。

mysql> explain select * from emp where empno= 998776\G;

*************************** 1. row ***************************

 

           id: 1 //代表这个sql语句用到的第一个索引值

  select_type: SIMPLE //简单,普通的索引

        table: emp // 现在是对哪张表查询,多表会显示多表的

   partitions: NULL

         type: const//常量 表的链接类型,有3种,

possible_keys: PRIMARY //可能用到的索引

          key: PRIMARY //实际用到的索引

      key_len: 3//索引长度

          ref: const

         rows: 1 //是从多少行里取出来的

     filtered: 100.00 //指返回结果的行占需要扫描到的行(rows列的值)的百分比

        Extra: NULL

1 row in set, 1 warning (0.00 sec)

 

ERROR: 

No query specified

 

sql语句加个\G可以纵向排列

Type 有3种:all 表示全表扫描,很慢,加了索引,所以为const

system 表仅有一行(=系统表),这是const链接类型的一个匹配

Const 表示最多只有一个匹配

possible_keys 会选一个最优的索引

 

删除索引

Alter table drop PRIMARY KEY(字段);

如果是主键,自动就是一个索引

这条语句是分析会不会用到索引,所描方式是什么,但是分析不出来时间。

 

Extra 查询细节信息

No tables,不用表的查询

Using filesort这个是对文件进行排序,要尽量避免,很慢。

Using temporary某些操作必须使用临时表

常见group by order by 

Using where 不用读取表中所有信息,仅通过索引就可以获取信息了

 

根据explain信息,我们可以得知,sql语句是否使用索引,是从多少记录中取出,还可以看到排序的方式。

 

但是如果这么查询:

select * from emp where  ename='ouiHJB';

还是会变得很慢,因为没有加索引。

 

posted @ 2019-06-06 09:27  yahn~  阅读(421)  评论(0编辑  收藏  举报