SQL 执行全链路
SELECT * FROM user WHERE id = 1 —— 这简单一行,在 MySQL 内部经历了什么? 一、MySQL 整体架构 1.1 Server 层——连接器、查询缓存、分析器、优化器、执行器 1.2 存储引擎层——InnoDB / MyISAM / Memory 1.3 架构图——各组件的位置 二、连接器 2.1 TCP 握手 + 身份认证 2.2 权限读取——连接建立时读取,之后不变 2.3 连接管理——wait_timeout 空闲连接超时 2.4 长连接 vs 短连接——长连接 OOM 问题 三、查询缓存(MySQL 8.0 已移除)...
MySQL 索引与 B+Tree 原理
为什么 MySQL 选择 B+Tree 而不是 B-Tree 或红黑树?最左前缀原则的根本原因是什么?从数据结构讲起。 一、索引的本质——排序的数据结构 1.1 索引 = 预排序 + 快速查找 1.2 没有索引时——全表扫描 1.3 有索引时——二分查找的变种 二、为什么是 B+Tree 2.1 哈希表——等值查询快,范围查询不行 2.2 二叉搜索树——高度太高,磁盘 IO 多 2.3 B-Tree——非叶子节点也存数据,范围查询仍需中序遍历 2.4 B+Tree——数据只存叶子节点,叶子节点双向链表连接 三、B+Tree 的结构 3.1 页(Page)——InnoDB...