Mysql索引

172 阅读1分钟

索引

  • 索引是提高查询效率为了更快的检索
  • 索引的数据结构分析

hash

红黑树

B树

B+树


hash

  • 键值类型适合等值查找,不支持范围查找,hash是基于内存的,数据库数据量较大

红黑树

  • 需要维持树的平衡,树的高度不可控。需要的IO次数不可控,时间复杂度O(logN)

B树

  • 是M叉树,数据存储在叶子节点(Page)上,虽然高度降低了,但是查询性能还是有瓶颈,因为Myqsl每页存储16KB,如果一条数据用1Kb,一页只能存16条数据。只可以有16个字节点。
  • 不支持范围查找 image

B+树

  • 索引节点与数据节点分开,一颗高度为3的B+树可以存储2千万数据,16Kb/(8b+6b) =1170, 1170x1170x16(数据节点条数)约等于两千万
  • B+树叶子节点是双向链表,支持范围查询,树的高度通常为(1-3)需要IO次数稳定 image

Mysql中的B+树

image

  • 页由下面组成

File Header 描述当前页通用的状态信息

Page Header 描述数据页特有的状态信息

infNum supreNum 即Infimum最小记录、Supremum最大记录

User Record 存储用户插入的记录数据,即用户记录

Free Space 剩余空间

Page Directory 页目录中包含若干个槽,每个槽中会存储某个数据记录在该页的地址偏移量

非聚集索引数据区域存的是主键