MySQL索引类型区分
存储方式区分
1. B-树索引
目前大多数索引都是采用B-树来存储,其包含组件有:
- 叶子节点:包含的条目直接指向表里的数据行。叶子节点之间彼此相连,一个叶子节点有一个指向下一个叶子节点的指针。
- 分支节点:包含的条目指向索引里其他的分支节点或者叶子节点。
- 根节点:一个 B-树索引只有一个根节点,实际上就是位于树的最顶端的分支节点。
2. 哈希索引
哈希索引也称为散列索引或 HASH 索引。MySQL 目前仅有 MEMORY 存储引擎和 HEAP 存储引擎支持这类索引。其中,MEMORY 存储引擎可以支持 B-树索引和 HASH 索引,且将 HASH 当成默认索引。
哈希索引的最大特点是访问速度快,但也存在下面的一些缺点:
- MySQL 需要读取表中索引列的值来参与散列计算,散列计算是一个比较耗时的操作。也就是说,相对于 B-树索引来说,建立哈希索引会耗费更多的时间。
- 不能使用 HASH 索引排序。
- HASH 索引只支持等值比较,如"=" "IN()"或"<=>"。
- HASH 索引不支持键的部分匹配,因为在计算 HASH 值的时候是通过整个索引值来计算的。
逻辑区分
1. 普通索引
普通索引是 MySQL 中最基本的索引类型,它没有任何限制,唯一任务就是加快系统对数据的访问速度。允许重复值和空值。
关键字是 INDEX 或 KEY。
2. 唯一索引
唯一索引列的值必须唯一,允许有空值。如果是组合索引,则列值的组合必须唯一。
关键字是 UNIQUE。
3. 主键索引
主键索引是一种特殊的唯一索引,不允许值重复或者值为空。
关键字是 PRIMARY KEY。
4. 空间索引
空间索引是对空间数据类型的字段建立的索引,不允许空值,只能在存储引擎为 MyISAM 的表中创建。
关键字是 SPATIAL。
5. 全文索引
全文索引主要用来查找文本中的关键字,只能在 CHAR、VARCHAR 或 TEXT 类型的列上创建。只有 MyISAM 存储引擎支持,允许重复值和空值。
关键字是 FULLTEXT。
实际使用区分
1. 单列索引
单列索引可以是普通索引,也可以是唯一性索引,还可以是全文索引。只要保证该索引只对应一个字段即可。
2. 组合索引
组合索引也称为复合索引或多列索引。相对于单列索引来说,组合索引是将原表的多个列共同组成一个索引。
查询时,字段顺序需与索引顺序一致;LIKE时,首字符不能是 '%',否则会影响索引使用。