按作用分类:
1.主键索引:不解释,都知道
2.普通索引:没有特殊限制,允许重复的值
3.唯一索引:不允许有重复的值,速度比普通索引略快
4.全文索引:用作全文搜索匹配,但基本用不上,只能索引英文单词,而且操作代价很大
按数据存储结构分类:
1.聚簇索引
定义:按照每张表的主键构造一颗B+树,同时叶子节点中存放的就是整张表的行记录数据,也将聚集索引的叶子节点称为数据页。这个特性决定了索引组织表中数据也是索引的一部分,每张表只能拥有一个聚簇索引。
2.非聚簇索引
定义:该索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同,一个表中可以拥有多个非聚集索引。
聚簇索引以外的索引都是非聚集索引,细分为普通索引、唯一索引、全文索引,它们也被称为二级索引。
例子:
有一张职工表emp,表设计如下:
创建了两个单列索引:idx_ename、idx_deptno
执行select * from emp where ename='RgfgEv' and deptno='102'
用explain进行分析只用到了idx_ename一个索引。
(当有多个单列索引时,mysql只能用到其中那个它认为最有效率的单列索引)
创建一个组合索引:idx_name_deptno
分别执行如下sql:
select * from emp where ename='JFWTBd' and deptno='107';
索引起作用
select * from emp where deptno='107' and ename='JFWTBd'
索引起作用
select * from emp where ename='JFWTBd'
索引起作用
select * from emp where deptno='107'
索引失效
这就是mysql遵循的最左前缀原则。