索引:提高数据库的性能,索引是物美价廉的东西了。不用加内存,不用改程序,不用调sql,只要执行正确的 create index ,查询速度就可能提高成百上千倍。

但是天下没有免费的午餐,查询速度的提高是以插入、更 新、删除的速度为代价的,这些写操作,增加了大量的IO。所以它的价值,在于提高一个海量数据的检索速度。

常见索引分为:

主键索引(primary key)

唯一索引(unique)

普通索引(index)

全文索引(fulltext)

 

索引的说明:

占用磁盘空间

当添加一条记录,除了添加到表中,还要维护二叉树,速度有影响,但不大。

当我们添加一个索引,不能够解决所有查询问题,需要分别给字段建立索引;例如 select * from EMP where ename='abcdef';

索引是以空间换时间

 

创建索引:

 

主键索引:

create table user1(id int primary key, name varchar(30));
create table user2(id int, name varchar(30), primary key(id));
alter table user3 add primary key(id);

主键索引的特点:

一个表中,最多有一个主键索引,当然可以使符合主键

主键索引的效率高(主键不可重复)

创建主键索引的列,它的值不能为null,且不能重复(使数据具有唯一性)

主键索引的列基本上是int

 

唯一索引创建:

create table user4(id int primary key, name varchar(30) unique);
create table user5(id int primary key, name varchar(30), unique(name));
alter table user6 add unique(name);

 

唯一索引的特点:

一个表中,可以有多个唯一索引

查询效率高

如果在某一列建立唯一索引,必须保证这列不能有重复数据

如果一个唯一索引上指定not null,等价于主键索引

 

普通索引的创建:

create table user8(id int primary key, name varchar(20), email varchar(30), index(name));
create table user9(id int primary key, name varchar(20), email varchar(30)); alter table user9 add index(name);
create index idx_name on user10(name);

 

普通索引的特点:

一个表中可以有多个普通索引,普通索引在实际开发中用的比较多

如果某列需要创建索引,但是该列有重复的值,那么我们就应该使用普通索引

 

索引确实为查询数据带来了许多方便,索引创建原则?

1、比较频繁作为查询查询条件的字段应该作为索引

2、唯一性太差的字段不适合单独作为索引,即使它查询条件频繁(比如员工姓名)

3、更新较为频繁的字段不适合作为索引(比如博客时间)

4、不会出现在where语句的字段不创建索引(其实和第一个条件差不多)

 


 

查询索引:

show keys from 表名

show index from 表名

desc 表名(简略)

 

 

关于如何删除索引的操作?

首先得区别你删除的是主键索引还是其他索引

主键索引的操作:alter+table+表名+drop primary key

删除其他索引操作:一般其他索引可能在一张表里比较多,因此,我们可以先查询有哪些其他索引,使用show+keys+from+表名,在Keys_name字段选择你要删除的索引

alter table 表名 drop index 索引名  或者  drop index 索引名 on 表名