MySQL索引底层数据结构
索引到底是什么
联合索引结构
聚集索引和非聚集索引
根本区别
MyISAM和InnoDB的索引
MyISAM索引文件和数据文件是分离的(非聚集)
主键索引
普通索引
InnoDB索引实现(聚集)
主键索引
普通索引
索引到底是什么
索引是帮助MySQL高效获取数据的 排好序 的 数据结构
索引存储在文件,MySQL使用的数据结构为 B+Tree
数据结构教学网站:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
联合索引结构
聚集索引和非聚集索引
根本区别
数据的物理存放顺序与索引顺序是否一致
MyISAM和InnoDB的索引
MyISAM的B+Tree的叶子节点上的data,并不是数据本身,而是数据存放的地址。主索引和辅助索引没啥区别,只是主索引中的key一定得是唯一的。这里的索引都是非聚集索引。
InnoDB的数据文件本身就是索引文件,B+Tree的叶子节点上的data就是数据本身,key为主键,这是聚集索引。非聚集索引,叶子节点上的data是物理地址(所以聚集索引的key,不能过长)。为什么存放的主键,而不是记录所在地址呢,理由相当简单,因为记录所在地址并不能保证一定不会变,但主键可以保证。
至于为什么主键通常建议使用自增id呢?
MyISAM索引文件和数据文件是分离的(非聚集)
主键索引
普通索引
InnoDB索引实现(聚集)
主键索引
普通索引
数据文件本身就是按B+Tree组织的一个索引结构文件
索引-叶子节点包含了完整的数据记录
为什么InnoDB表必须有主键,并且推荐使用整型的自增主键?
为什么非主键索引结构叶子节点存储的是主键值?(一致性和节省存储空间)
沈阳性病医院哪家好
沈阳性病医院