mysql

1. 基础知识

1. cs架构

2. 安装与启动

3. 连接过程

1. 客户端发起连接(3种,tcp,命名通道与共享内存,socket)

2. 服务端接受连接

1. 处理连接
2. 解析与优化(1.查询缓存,2.语法解析,3.查询优化)
3. 存储引擎

4. 常用引擎

1. InnoDB

2. MyISAM

2. 启动选项与变量

1. 设置mysql启动参数(就近原则)

1. 命令行和配置文件

2. 配置文件

1. 系统变量

2. 状态变量

3. 字符串比较规则

1. 什么是字符集

使用二进制的一组数据代表现实世界的字符串。

常用字符集 GBK(最多2字节),uft8(最多3字节),utf8mb4(最多4字节)

2. 字符集比较规则

用来比较同一种字符集的字符大小

3. 字符集应用

注意:对于同一个字符串,如果编码和解码采用的不同字符集,那么结果可能会不同。

4. 四个级别的字符集和比较规则

服务器级别

数据库级别

表级别

列级别

4. InnoDB记录结构

1. InnoDB页简介

磁盘和内存数据交互的最小单位,一页=16kb。

2. InnoDB行格式

1. 简介

记录存放在磁盘上的方式成为行格式

3. 行格式分类

1. compact类型行格式

1. 组成
额外信息(变长字段长度列表,null值列表,记录头信息)
真实数据

2. redundant行格式

3. Dynamic行格式

这两种行格式类似于 COMPACT行格式 ,只不过在处理行溢出数据时有点儿分歧,它们不会在记录的真实数据处存储字符串的前768个字节,而是把所有的字节都存储到其他页面中,只在记录的真实数据处存储其他页面的地址。

3. Compressed行格式

Compressed 行格式会采用压缩算法对页面进行压缩。

4. 行溢出

1. 什么是行溢出

当一页的容量满了,这是如果记录的数据仍然存不下,记录的真实数据的溢出部分会存在另外的页中,此时记录的真实数据会腾出20个字节存放剩余数据在其他页的地址。

2. 行溢出的临界值

记住一页最大容量=16348byte

5. InnoDB数据页结构

1. 概念:存储数据的页

2. 数据页结构

1. File Header 表示页的一些通用信息,占固定的38字节。
2. Page Header 表示数据页专有的一些信息,占固定的56个字节。
3. Infimum + Supremum 两个虚拟的伪记录,分别表示页中的最小和最大记录,占固定的 26 个字节。
4. User Records 真实存储我们插入的记录的部分,大小不固定。
5. Free Space 页中尚未使用的部分,大小不确定。
6. Page Directory 将一页里面的记录分为多组,记录每组最大记录的物理地址和主键,这个称为槽,页目录就是由槽组成。
7. File Trailer 用于检验页是否完整的部分,占用固定的8个字节。

3. 记录在数据页的数据结构

每个记录的头信息中都有一个 next_record 属性,从而使页中的所有记录串联成一个 单链表 。

4. 根据主键在页中查找过程

1. 利用二分法查找槽
2. 通过记录的记录头信息中的next_record,依次寻找主键相同的记录。

5. 页与页之间的数据结构

利用File Header的 前指针和后指针形成双向链表。

6. mysql索引

1. InnoDB索引方案

1. 页分裂

1. 前提条件:下一个数据页中用户记录的主键值必须大于上一个页中用户记录的主键值。

2. 索引 (给数据页做目录)

1. 目录页
2. 目录项记录
3. B+数据结构

3. 索引类型

1. 聚簇索引
2. 二级索引
3. 联合索引

2. MyISAM索引方案

和InnoDB索引区别:MyISAM的索引的子节点不存数据,只存数据的行号和索引列,而InnoDB索引的子节点是保存了索引列和主键(如果是聚簇索引保存整行数据和主键)