1.唯一索引
给表中某一列设置为了唯一约束(这列不允许出现重复数据)后,数据库会为将这一列设置索引,这个索引叫做唯一索引(主键那一列是一个特殊的唯一索引,不仅要满足唯一索引这一列不可以出现重复数据,而且这一列还不能出现Null,每张表可以有多个唯一索引,但是只能有一个主键索引)
2.单值索引
一个索引只包含单个列,与联合索引(复合索引)相对
一张表中可以有多个单值索引
创建单值索引:create index 索引名 on 表名(字段名)
或者alter table表名 add index索引名(字段)
删除单值索引:drop index 索引名 on 表名
3.复合索引
一个索引包含多个列
4.全文索引 是模糊匹配的一种更好的解决方案(也就是说它的效率比like%更高),只有数据类型为char,varchar,text的列才能被设置成全文索引
新建一张表,表中有三个字段:id(int类型),title(varchar类型),body(text类型)
然后设置body这一列为全文索引:fulltext (body)
现在搜索哪一列的body部分包含"database"
执行sql语句:
select * from articles
where match(body) against('database')
比执行下面的sql语句要快很多:
select * from articles
where boby like '%database%';
添加索引有两种情况:
(1)建表的时候就添加索引
(2)表已经建完了再添加索引
1.建表时添加索引 这种方式添加索引比较简单, 索引类型 索引名(列名1.列名2,列名3.....)
普通索引是key 索引名(列名1.列名2,列名3.....)
唯一索引是unique 索引名(列名1.列名2,列名3.....)
主键索引是primary key(列名1.列名2,列名3.....) 唯一索引不需要设置索引名
2.表已经建完了再添加索引
创建普通索引:alter table 表名 add index (列名1.列名2,列名3.....)
创建唯一索引:alter table 表名 add unique 索引名(列名1.列名2,列名3.....)
创建主键索引:alter table 表名 add primary key (列名)
举例如下:
创建了一张表,表里面有三列,a,b,c三列
表中创建了四个索引:a这列是主键索引,b这列是唯一索引,c这列是单值索引,c,d两列组成了联合索引
create table test
(
a int(10) auto_increment;
b varchar(20);
c varchar(20);
primary key(a);
unique index_test1(b);
key index_test2(c);
key index_test3(c,d);
)
如果是再可视化客户端中添加索引就更简单了
比如下面这张表中有6个字段,我们希望创建一个用户id+商品的组合索引
鼠标悬停在表名上,右键更改表(有的数据库系统显示的是设计表)
选中索引,然后添加索引
第一个字段是索引的名字,第二个字段是选中原表的哪几个字段组合起来成为索引,第三个字段表示这个索引是唯一索引,第四个字段是表示索引用b树来存储