索引篇

mysql数据组织形式,页内是单链表,页之间是双向链表连接。
如果没有索引是怎样查找的?可以分为两个步骤:

  1. 定位到记录所在页。
  2. 从所在的页内查找相应的记录。

首先,第一步,在没有索引的情况下,无论是根据主键列还是其它列的值进行查找,由于我们不能快速地定位到记录所在的页,所有只能从第一页沿着双向链表一直往下找。而在每一页中再按照页内的查找方式去查找指定的记录。需要遍历所有的数据页。
页内查找方式
根据搜索条件的不同分为两种情况:

  • 以主键为搜索条件:在页目录中使用二分法快速定位到对应的槽,然后再遍历该槽对应分组中的记录。
  • 以其它列作为搜索条件:因为数据页内并没有为非主键列建立所谓的页目录,所以无法通过二分法快速定位相应的槽。所以只能从Infimum记录开始依此遍历单向链表中的每条记录。

索引
索引是什么?
InnoDB使用页作为管理存储空间的基本单位。为了加速查找到目标记录所在页,给数据页建立了一个目录(页表),这个目录就叫做索引。
索引采用哪种数据结构?
需要满足以下特性:

  • 非连续的地址空间。因为索引项会很多,很难找大片的连续地址空间去存储。
  • 增删性能要好。

多级页表构成了一颗B+树

为什么使用B+树?

行内代码

💡 Tips:可通过 markdown 语法(+ `code` + + 空格)或者快捷键 ctrl/cmd + E快速插入行内代码。