一,InnoDB索引实现
1、表数据文件本身就是按照B+Tree组织的一个索引结构文件
mysql默认储存目录为安装下的data目录,每个库对应一个文件夹(跟库名一样)
存放文件为格式为 .frm、.ibd文件,frm存储表结构,ibd则存储的是索引就数据,较高的版本只有ibd文件了(包含了表结构索引数据)。
2、聚集索引-叶子节点包含了完整的数据记录
3、innoBD表必须使用主键,并且推荐使用整型自增主键
如果表不创建主键mysql底层会自动创建隐示主键
推荐使用整型,因为整型不用通过类型转换可以直接比较
4、非主键索引的叶子节点存放的索引值和是主键值
每个节点存放的是索引列的值,非主键索引不具备唯一性,需要找到叶子节点主键进行回表取数据(根据找到的主键值在进行聚集索引取数据)
5、每个节点存放的默认大小16KB(可以调整不建议调整),可以使用命令查看当前大小
show global status like 'Innodb_page_size'
6、每次启动mysql服务默认会将索引的跟节点和子节点读取存放到内存,
7、所有索引都是按小到大顺序依次排列,提高查找性能,每个节点用二分查找方式
8、叶子节点的双向箭头两边都有一块空间用于存放边联数据地址,
9、下图里面的地址是下级节点物理地址,
聚集索引
非聚集索引