mysql存储结构以及索引树简述(基于InnoDB)

1.序言

本文主要讲述mysql的存储结构,包括主键索引、二级索引,粗略讲解一下mysql的数据查找过程、数据页以及计算分表数据量。

2.索引树概述

mysql数据引擎分为myism和innodb,mysql5.6(记忆中)之后支持innodb,innodb支持行锁和事务。

基于innodb,mysql的索引树数据结构主要为b+树,索引树的叶子节点存储了数据,其余节点只有索引本身。同时,叶子节点之间类似双向链表,通过指针连接。

同时,索引树具有b+树的特征,如有序(父节点大于左节点,小于右节点)。

类似长这样,只不过数据库的索引树叶子节点是双向链表

附送一个生成各种树的连接:传送门

 

mysql存储结构以及索引树简述(基于InnoDB)_第1张图片

3.主键索引

主键索引的索引树结构基本没什么变化,主键构成了主键索引树。

需要注意的是,若没有主键,将使用唯一索引的字段作为索引树的值;若没有唯一索引,数据库将默认新建一个隐藏自增字段作为索引树构建的元素。

与一般的B+树不一致的是,主键索引的叶子节点不只是存储主键,还存放了主键所在的行的全部数据。

(画图太麻烦,自行想象)

4.二级索引

二级索引就是常说的普通索引、唯一索引之类的,与主键索引不一样的地方在于,普通索引的叶子节点存放的是索引键值和对应的主键。这就意味着每次通过二级索引查找数据时,除非返回值只包含二级索引的值和主键,否则都要通过主键索引再次查询。

5.数据页

数据页是mysql存储索引树的实际物理地址,一般默认一页16k。第一层的主键索引一般只会占一页大小,这就决定了第一层索引最大具有的数量:大概的公式: 16k /(主键类型长度 + 地址引用),地址引用一般是 8 字节的长度。举个例子,假如主键是int类型,整行数据大小为1K,那么第一层的数量大概是 16 * 1024 / (8+8) = 1024。第二层就是 1024* 1024,第三层就是1024*1024* 16k/1k 约为 1600万。

这样就可以计算大约的分表数量;

你可能感兴趣的:(mysql)