theme-MySQL-核心知识
0. 与其他卡片的关联
- 前置卡片:
- 后续卡片:
- 相似主题:
1. 核心观点
(核心观点下四个小标题填写核心定义摘要,要求简明扼要)格式如下
Ⅰ. 概念层
Ⅱ. 应用层
Ⅲ. 实现层
IV. 原理层
2. 背景/出处
- 来源:
3. 展开说明
架构
逻辑架构
核心流程
索引

定义
索引分类
联合索引
- MySQL-联合索引-基本概念
- MySQL-联合索引-联合索引为什么非最左匹配会失效 — 数据按第一列排序,跳过最左列无法走索引
- MySQL-联合索引-索引下推 — MySQL 5.6 起在存储引擎层预过滤,减少回表次数
- MySQL-联合索引-索引截断 — a=1 and c=3 场景下不同版本的截断处理方式
聚簇索引
二级索引
什么时候需要索引,什么时候不需要索引
索引优化
索引底层数据结构
为什么选择 B+ 树作为索引的数据结构
-
- 怎样的索引的数据结构是好的?
- 8.1 二分查找#顺序排列后二分查找高效定位数据,相比于常数时间复杂度,二分查找时间复杂度甚至更低
- 缺点:每次查找需要计算中间位置,插入新元素的时候性能太低
- 什么是二分查找树?
- 缺点:但是最差情况会退化成链表,导致查询效率低
- 什么是自平衡二叉树?
- 优点:解决退化成链表的问题
- 缺点:不管平衡二叉查找树还是红黑树,都会随着插入的元素增多,而导致树的高度变高,这就意味着磁盘 I/O 操作次数多,会影响整体数据查询的效率
- 什么是 B 树
- 优点:使用多叉树减少层数方式来减少 io 次数
- 缺点:
- 非叶节点也包含数据,需要花费更多的磁盘 I/O 操作次数来读到「有用的索引数据」
- 什么是 B+ 树?
- 只有叶子节点存储数据,io 更加规律和可预测
索引失效
存储层
行格式
- MySQL 一行记录是怎么存储的?
- MySQL 的数据存放在哪个文件?
- 表空间文件的结构是怎么样的?
- 1、行(row)
- 2、页(page)
- 3、区(extent)
- 让链表中相邻的页的物理位置也相邻,这样就可以使用顺序 I/O 了,那么在范围查询(扫描叶子节点)的时候性能就会很高
- 4、段(segment)
- 段一般分为数据段、索引段和回滚段等
- 表空间文件的结构是怎么样的?
- InnoDB 行格式有哪些?
- 从 MySQL5.7 版本之后,默认使用 Dynamic 行格式
- COMPACT 行格式长什么样?
- varchar(n) 中 N 最大取值为多少?
- 行溢出后,MySQL 是怎么处理的?
- 总结
- MySQL 的数据存放在哪个文件?
单表不超过 2000w
- MySQL-单表行数-实验
- MySQL-单表行数-单表数量限制
- MySQL-单表行数-表空间
- MySQL-单表行数-页的数据结构
- MySQL-单表行数-索引的数据结构
- MySQL-单表行数-单表建议值
索引失效
锁
4. 应用/启发
(个人思考、引发的问题或工作/生活中的应用点)