索引
- 索引是提高查询效率为了更快的检索
- 索引的数据结构分析
hash
红黑树
B树
B+树
hash
- 键值类型适合等值查找,不支持范围查找,hash是基于内存的,数据库数据量较大
红黑树
- 需要维持树的平衡,树的高度不可控。需要的IO次数不可控,时间复杂度O(logN)
B树
- 是M叉树,数据存储在叶子节点(Page)上,虽然高度降低了,但是查询性能还是有瓶颈,因为Myqsl每页存储16KB,如果一条数据用1Kb,一页只能存16条数据。只可以有16个字节点。
- 不支持范围查找
B+树
- 索引节点与数据节点分开,一颗高度为3的B+树可以存储2千万数据,16Kb/(8b+6b) =1170, 1170x1170x16(数据节点条数)约等于两千万
- B+树叶子节点是双向链表,支持范围查询,树的高度通常为(1-3)需要IO次数稳定
Mysql中的B+树
- 页由下面组成
File Header 描述当前页通用的状态信息
Page Header 描述数据页特有的状态信息
infNum supreNum 即Infimum最小记录、Supremum最大记录
User Record 存储用户插入的记录数据,即用户记录
Free Space 剩余空间
Page Directory 页目录中包含若干个槽,每个槽中会存储某个数据记录在该页的地址偏移量
非聚集索引数据区域存的是主键