MySQL数据结构

数据结构

  • InnoDB 聚簇索引 数据和索引B+树存储在一起

InnoDB的数据文件本身要按主键聚集,所以InnoDB要求表必须有主键(MyISAM可以没有),如果没有显式指定,则MySQL系统会自动选择一个可以唯一标识数据记录的列作为主键,如果不存在这种列,则MySQL自动为InnoDB表生成一个隐含字段作为主键,这个字段长度为6个字节,类型为长整形

  • MyISM 非聚簇索引 主键B+树在叶子节点存储指向真正数据行的指针,而非主键

alt

  • 辅助索引B+树中检索Name,到达其叶子节点获取对应的主键
  • 使用主键在主索引B+树种再执行一次B+树检索操作,最终到达叶子节点即可获取整行数据

储存主键ID而不直接存储地址值,这样避免行移动或者数据页分裂时辅助索引的维护工作。

alt
Page结构 InnoDB存储的最基本构件(最小单位)
InnoDB最大64TB的存储容量(16Kib * 2^32 = 64Tib)

题外话

如果数据不更改,使用MyISM性能也不错,但是数据一点不变,为什么不用redis呢?

MYSQL8 各方面超越5.7 如果新选择不要考虑5.7

窗口函数

多线程各方面性能

降序索引 DESC

主键不要使用uuid之类的,索引树的特性而要分裂、调整节点,十分低效。
辅助索引占用更多的空间,因为辅助索引保存主键的值。

自适应哈希索引(Adaptive Hash Index, AHI) 有一些触发条件创建