MySQL 性能优化
1. 索引
1.1 索引结构
1.1.1 二叉树
有序列表无用
1.1.2 红黑树
数据量大时 树高不可控
1.1.3 B+ 树
非叶子节点不存数据,只存索引,叶子节点包含所有索引

1.2 存储引擎
1.2.1 MyISAM
.frm 表结构 .MYD 表数据 . MYI 表索引
1.2.2 Innodb
.frm 存储表结构 .ibd 存储表数据 索引
myIsam 叶子节点放索引地址
innodb 存放整行数据
聚集索引 叶节点包含完整记录
非聚集索引 索引和数据分开保存
主键索引都是聚集索引
非主键索引 存的为主键字段

- innodb 尽量使用主键
ibd 索引都是 b+ 树都是主键,即使不建主键,也会自己查找唯一值的创建或直接创建 rowid 来作为主键
为什么要用整型自增
b+ 树比大小更方便,更快速
自增,在新增索引时永远是插入末尾。如果非自增,插满的时候会插入中间位置导致分裂
uuid 太长了,占用空间大
msql 还使用了 hash 索引,
hash 索引 时间复杂度为常量
hash() 完后取模,存入对应桶里的链表,
但不支持范围查找
b+ 树默认排列,同时每段索引的末端会保存下一段和上一段索引的磁盘地址
方便范围查找
联合索引的底层实现?
从第一个往后走,必须要带前一个,

因为排序是从第一个开始依次往后排序,字段的顺序查找保证了底层索引查询的有序性
长期运行时大量搜索结果的保存
冗余索引放入内存方便查询,叶节点存数据
B+ 树和 B 树的区别
B+ 树对非叶子节点只保存索引信息,同时在叶子节点保留所有信息