一、MySQL记录的存储结构:
1、Page的结构,如下图:
1.1 页头
记录页面的控制信息,共占56字节,包括页的左右兄弟页面指针、页面空间使用情况等。
1.2 虚记录
最大虚记录:比页内最大主键还大
最小虚记录:比页内最小主键还小
1.3 记录堆
行记录存储区,分为有效记录和已删除记录
1.4 自由空间链表
已删除记录组成的链表
1.5 未分配空间
页面未使用的存储空间;
2、Page页内记录的维护
2.1 顺序保证
逻辑连续,如图所示:
2.2 插入策略
为了提高内存的利用率,减少内存碎片化空洞,首先从自由空间链表中分配(已删除的记录链表),如果空间不够再从未分配空间分配;
2.3 页内查询
二分查找,首先从物理连续的solt(0~n)中查找所在的solt位,然后再从page逻辑链表中找到所对应的记录;如图所示;
3、Page页内数据特性
3.1 PageSize的固定大小为16KB
3.2 每页至少两天记录,单行最大为8KB
3.3 最多存储10个大字段
数据段最大768 ->(768+20)*10<8K
超出部分存储在溢出页
3.4 VARCHAR
1或2个字节描述字符长度;
实际内容存储在长度字节之后;
VARCHAR(255) [一个字节]+内容
VARCHAR(256) [两个字节]+内容
二、 InnoDB索引原理和优化
1、索引的原理分析
1.1 聚簇索引
数据存储在主键索引中,数据按主键顺序存储,如图所示:
1.2 二级索引
除主键索引以外的索引,叶子中存储主键值
一次查询需要走两遍查询
主键大小会影响所有索引的大小,如图所示:
1.3 联合索引
Key由多个字段组成,最左匹配原则
一个索引只创建一棵树按第一列排序
第一列相同按第二列排序
注意 :如果不是按照最左开始查找,无法使用索引,不能跳过中间列,某列使用范围查询后面的列不能使用索引。
2、索引的优化分析
2.1 存储空间
索引文件大小是由字段大小、页内节点数目、树的层数
2.2 主键的选择
自增主键,顺序写入,效率高
随机主键,结点分裂、数据移动
自增主键写入磁盘利用率高,每次查询走两级索引
随机主键写入磁盘利用率低,每次查询走两级索引
业务主键:写入查询磁盘利用率都高,可以使用一级索引
联合主键:影响索引大小,不易维护,不建议使用
2.3 联合主键
按索引区分度排序,并且覆盖索引;
2.4 字符串索引
字符是按照字节对比的,设置的时候注意控制长度;
不支持开头的%模糊查询,只能全表扫描;
-
存储
+关注
关注
13文章
4260浏览量
85653 -
MySQL
+关注
关注
1文章
801浏览量
26437
发布评论请先 登录
相关推荐
评论