Fork me on GitHub

MySQL索引类型区分

目录

存储方式区分

1. B-树索引

目前大多数索引都是采用B-树来存储,其包含组件有:

  • 叶子节点:包含的条目直接指向表里的数据行。叶子节点之间彼此相连,一个叶子节点有一个指向下一个叶子节点的指针。
  • 分支节点:包含的条目指向索引里其他的分支节点或者叶子节点。
  • 根节点:一个 B-树索引只有一个根节点,实际上就是位于树的最顶端的分支节点。

2. 哈希索引

哈希索引也称为散列索引或 HASH 索引。MySQL 目前仅有 MEMORY 存储引擎和 HEAP 存储引擎支持这类索引。其中,MEMORY 存储引擎可以支持 B-树索引和 HASH 索引,且将 HASH 当成默认索引。

哈希索引的最大特点是访问速度快,但也存在下面的一些缺点:

  • MySQL 需要读取表中索引列的值来参与散列计算,散列计算是一个比较耗时的操作。也就是说,相对于 B-树索引来说,建立哈希索引会耗费更多的时间。
  • 不能使用 HASH 索引排序。
  • HASH 索引只支持等值比较,如”=” “IN()”或”<=>”。
  • HASH 索引不支持键的部分匹配,因为在计算 HASH 值的时候是通过整个索引值来计算的。

逻辑区分

1. 普通索引

普通索引是 MySQL 中最基本的索引类型,它没有任何限制,唯一任务就是加快系统对数据的访问速度。允许重复值和空值。

关键字是 INDEXKEY

2. 唯一索引

唯一索引列的值必须唯一,允许有空值。如果是组合索引,则列值的组合必须唯一。

关键字是 UNIQUE

3. 主键索引

主键索引是一种特殊的唯一索引,不允许值重复或者值为空。

关键字是 PRIMARY KEY

4. 空间索引

空间索引是对空间数据类型的字段建立的索引,不允许空值,只能在存储引擎为 MyISAM 的表中创建。

关键字是 SPATIAL

5. 全文索引

全文索引主要用来查找文本中的关键字,只能在 CHAR、VARCHAR 或 TEXT 类型的列上创建。只有 MyISAM 存储引擎支持,允许重复值和空值。

关键字是 FULLTEXT

实际使用区分

1. 单列索引

单列索引可以是普通索引,也可以是唯一性索引,还可以是全文索引。只要保证该索引只对应一个字段即可。

2. 组合索引

组合索引也称为复合索引或多列索引。相对于单列索引来说,组合索引是将原表的多个列共同组成一个索引。

查询时,字段顺序需与索引顺序一致;LIKE时,首字符不能是 ‘%’,否则会影响索引使用。

相关文章

微信打赏

赞赏是不耍流氓的鼓励

评论系统未开启,无法评论!