索引:提高数据库的性能,索引是物美价廉的东西了。不用加内存,不用改程序,不用调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 表名