diff --git a/MySQL/1. 执行 SQL 语句的过程.md b/MySQL/1. 执行 SQL 语句的过程.md new file mode 100644 index 0000000..c72fd9e --- /dev/null +++ b/MySQL/1. 执行 SQL 语句的过程.md @@ -0,0 +1,31 @@ +# 执行一条 SQL 语句的过程 + +## 连接器 + +- 连接到服务(TCP) +- 验证用户身份 +- 验证用户权限 + +## 解析器 + +- 词法分析 +- 语法分析 + +## 预处理器 + +- 检查表以及字段 +- 扩展 * 符号 + +## 优化器 + +- 决定使用的索引 + +## 执行器 + +- 与存储引擎交互 + +*三种交互* + +- 主键索引 +- 全表扫描 +- 索引下推 \ No newline at end of file diff --git a/MySQL/2. 记录的存储过程.md b/MySQL/2. 记录的存储过程.md new file mode 100644 index 0000000..511b02d --- /dev/null +++ b/MySQL/2. 记录的存储过程.md @@ -0,0 +1,38 @@ +# 存放文件 + +`InnoDB` + +```text +|-- db.opt +| 默认字符集、字符校验规则 +|-- t_order.frm +| 表结构 +|-- t_order.ibd +| 表数据 +``` + +- 字符集 +- 表结构 +- 表数据 + +# 表数据空间 + +![表空间](https://cdn.xiaolincoding.com/gh/xiaolincoder/mysql/row_format/%E8%A1%A8%E7%A9%BA%E9%97%B4%E7%BB%93%E6%9E%84.drawio.png) + +- 行 +- 页 + - 读写单位 + - 默认 16KB +- 区 +- 段 + +# 行格式 + +- 变长字段长度列表 +- NULL 列表 +- 记录头 +- 真实数据 +- 隐藏字段 + - row_id + - trx_id + - roll_pointer \ No newline at end of file diff --git a/MySQL/3. 索引算法.md b/MySQL/3. 索引算法.md new file mode 100644 index 0000000..dd0de1e --- /dev/null +++ b/MySQL/3. 索引算法.md @@ -0,0 +1,22 @@ +# B+ Tree 索引 + +## 适用 + +- 主键索引 + - 叶子结点存放具体数据 +- 二级索引 + - 叶子结点存放主键值 + - 回表主键索引 + +## B+ vs B + +- 基于范围 +- 数据量小 + +## B+ vs 二叉 + +- 深度 + +## B+ vs Hash + +- 等值查询 diff --git a/MySQL/4. 联合索引.md b/MySQL/4. 联合索引.md new file mode 100644 index 0000000..1b6a9c5 --- /dev/null +++ b/MySQL/4. 联合索引.md @@ -0,0 +1,24 @@ +# 联合索引 + +- 二级索引的一种 + +## 最左匹配 + +有序 -> 匹配 + +## 范围查询 + +> Q: `select * from t_table where a > 1 and b = 2` 联合索引(a, b)哪一个字段用到了联合索引的 B+Tree? + + +- a + - 在符合 `a > 1` 条件的 `b` 中,字段值是无序的。 + +> Q: `select * from t_table where a >= 1 and b = 2` 联合索引(a, b)哪一个字段用到了联合索引的 B+Tree? + +- a, b + - 因为能确定唯一起始点 + +## 索引下推 + +- 提前判断减少回表 \ No newline at end of file