根据索引的存储方式分类:
1. B-树索引(目前大部分的索引都是采用 B-树索引来存储的,如:InnoDB)
组件:
叶子节点:包含的条目直接指向表里的数据行。叶子节点之间彼此相连,一个叶子节点有一个指向下一个叶子节点的指针。
分支节点:包含的条目指向索引里其他的分支节点或者叶子节点。
根节点:一个 B-树索引只有一个根节点,实际上就是位于树的最顶端的分支节点。
约束:B-树索引必须遵循左边前缀原则
查询必须从索引的最左边的列开始
2. 哈希索引(MySQL目前仅有 MEMORY 存储引擎和 HEAP 存储引擎支持这类索引, MEMORY 存储引擎可以支持 B- 树索引和 HASH 索引,且将 HASH 当成默认索引)
原理:根据索引列对应的哈希值的方法获取表的记录行,访问速度快
缺点:
MySQL 需要读取表中索引列的值来参与散列计算,散列计算是一个比较耗时的操作。也就是说,相对于 B- 树索引来说,建立哈希索引会耗费更多的时间。
不能使用 HASH 索引排序
HASH 索引只支持等值比较,如“=”“IN()”或“<=>”
根据索引的具体用途分类:
1、普通索引:最基本的索引类型,唯一任务是加快对数据的访问速度,没有任何限制。创建普通索引时,通常使用的关键字是 INDEX 或 KEY。
2、唯一索引:表上一个字段或者多个字段的组合建立的索引,这些字段组合起来能够确定唯一,允许存在空值(只允许存在一条空值).
创建唯一性索引的目的往往不是为了提高访问速度,而是为了避免数据出现重复。
3、主键索引:不允许值重复或者值为空,并且每个表只能有一个主键。必须指定关键字 PRIMARY KEY。
4、空间索引:创建空间索引时,使用SPATIAL关键字。要求,引擎为MyISAM,创建空间索引的列,必须将其声明为NOT NULL
5、全文索引:全文索引只能在 VARCHAR 或 TEXT 类型的列上创建,并且只能在 MyISAM 表中创建。