索引搜索变快,但是增删改会变慢
索引本身也要占空间
存在*.myini中的
介绍一款工具
Explain
这是一款分析工具,可以对一个sql语句进行分析,可以预测sql语句执行效率。
mysql> explain select * from emp where empno= 998776G;
*************************** 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';
还是会变得很慢,因为没有加索引。