- bTree+只有叶子节点存放数据,非叶子节点存放键值+指针
- bTree+包含了顺序,用二分查找法进行搜索,所以用自增id有很大好处:新索引在索引右边插入即可,不需要对叶子节点进行挪动(当前页数据刚好满时,甚至需要对页分裂)
- 主键索引(聚簇索引)中包含了整行的完整数据;非主键索引(二级索引)最终指向改行数据的主键Id;所以开发中提倡多用getEntityById这样的实体访问,访问性能最佳
- 非主键索引,先找到pk,然后从pk加载对应的数据(回表操作)
- 主键索引和非主键索引数据,平时都存储在磁盘文件中;根据内存分配大小和访问策略,热数据驻留在缓存innodb_buffer_pool中,缓存起来
- 为什么不用bTree: 因为B树不管叶子节点还是非叶子节点,都会保存数据,这样导致在非叶子节点中能保存的指针数量变少(有些资料也称为扇出),指针少的情况下要保存大量数据,只能增加树的高度,导致IO操作变多,查询性能变低