聚簇索引(主键索引): InnoDb 用主键做聚簇索引,如果没有主键,会选择一个非空的索引替代,如果还没有,就定义一个隐式主键。聚簇索引是主键和数据行存储在一起。一个表只能有一个聚簇索引。

                                         在InnoDb中,可以说 聚簇索引就是表,不需要独立的行存储

二级索引(辅助索引):所有非聚簇索引都是二级索引,二级索引如果查询需要返回所有列的话,二级索引需要两次索引查找,而不是一次才能取到数据,因为存储引擎第一次需要通过二级索引找到索引的叶子节点,从而找到数据的主键,然后在聚簇索引中用主键再次查找索引,再找到数据。

create index indexname on tablename(columnname1,columnname2);  

alter table tablename add index indexname(columnname1,columnname2);  

其他维度的分类

复合索引(多列索引、联合索引):由多列创建的索引称为复合索引

单列索引:单列上创建的索引

前缀索引:当索引的字符串列很大时,创建的索引也就变得很大,为了减小索引体积,提高索引的扫描速度,就用索引的前部分字串索引,这样索引占用的空间就会大大减少。

mysql添加两个字段拼接唯一索引 mysql 两个索引_主键

BTree索引:索引存储结构为B+TREE

哈希索引: 存储的值为hash值

唯一索引: 数据表本列内存储的值不重复

覆盖索引: 如果查询的列,通过索引项的信息可直接返回,则该索引称之为查询SQL的覆盖索引。覆盖索引可以提高查询的效率。

 

附录:索引相关常用命令:(来自
1) 创建主键
 CREATE TABLE `pk_tab2` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `a1` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

2) 创建唯一索引
create unique index indexname on tablename(columnname);
alter table tablename add unique index indexname(columnname);

 

3) 创建单列一般索引
create index indexname on tablename(columnname);
alter table tablename add index indexname(columnname);

 

4) 创建单列前缀索引
create index indexname on tablename(columnname(10));    //单列的前10个字符创建前缀索引
alter table tablename add index indexname(columnname(10)); //单列的前10个字符创建前缀索引

 

5) 创建复合索引
create index indexname on tablename(columnname1,columnname2);    //多列的复合索引
create index indexname on tablename(columnname1,columnname2(10));    //多列的包含前缀的复合索引
alter table tablename add index indexname(columnname1,columnname2); //多列的复合索引
alter table tablename add index indexname(columnname1,columnname(10)); //多列的包含前缀的复合索引

 

6) 删除索引
drop index indexname on tablename;;
alter table tablename drop  index indexname;

 

7) 查看索引
show index from tablename;
show create table pk_tab2;