请注意,本文编写于 50 天前,最后修改于 50 天前,其中某些信息可能已经过时。
目录
索引的作用
索引模型探讨
哈希表
有序数组
二叉树
InnoDB 的索引模型
索引维护
04 | 深入浅出索引(上)
索引的作用
索引的作用是提高查询效率
索引模型探讨
以下的数据结构可以用于实现索引
哈希表
有序数组
- 等值查询和范围查询的性能很好
- 但是更新数据很麻烦,比如往数组中间位置插入数据,插入位置往后的数据都要往后移动一个位置
- 所以有序数组只适用于静态存储引擎
二叉树
- 父节点左子树所有节点的值小于父节点的值,右子树所有节点的值大于父节点的值
- 需要保持二叉树为平衡二叉树,才能保证查询的时间复杂度O(log(N))
- 为了减少读取磁盘次数,一般采用 N 叉树
InnoDB 的索引模型
InnoDB 用的是 B+ 树。

基于主键索引和普通索引的查询的区别是:
- 如果语句是
select * from T where ID = 500,即主键查询方式,则只需要搜索 ID 这棵 B+ 树;
- 如果语句是
select * from T where k = 5,即普通索引查询方式,则需要先搜索 k 索引树,得到 ID 的值为 500,再到 ID 索引树搜索一次。这个过程称为回表。
索引维护
性能方面的问题:
- 如果是追加插入就很简单,但如果是在中间位置插入,就很麻烦,需要挪动后面的数据

- 另一个问题是,如果插入时数据页满了,会引起页分裂问题
- 与页分裂对应,还有页合并
- 用自增 ID 是追加的方式,不需要挪动数据,也不会引起页分裂
存储空间方面的问题:
- 用自增 ID 有利于非主键索引(二级索引)节省空间,因为非主键索引的叶子节点存储的就是每条记录的主键
本文作者:菜宝熊
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA
许可协议。转载请注明出处!