今天更深刻的研究了一下索引, 就把我研究的东西给你们分享一下吧, 欢迎大佬指正视频
先建立两个表blog
1. Myisam排序
Myisam的数据文件是三个, 一个是原数据和结构, 一个是索引, 一个是数据, 你们在建立好以后能够看在数据文件里面看下索引
左侧是主键的索引结构, B+Tree, 叶子节点(最下层)储存的是数据地址, 经过查询条件查询的时候, 查找的是数据地址, 经过数据地址拿到数据,图片
右侧是普通索引, 拿左侧途中的col2字段做为索引, 和主键查询是同样的, 查找的都是数据地址, 经过数据地址拿到数据innodb
2. InnoDb分页
InnoDb的数据文件时一个, 因此, 表的索引和数据都是在一块儿的im
左侧图片是主键索引, 索引和数据都是存放在一块儿的, 经过主键能够直接查询到数据总结
右侧图片是普通索引, 经过普通索引查询到的数据是主键id, 经过主键id再去查询对应的数据, 这里就存在了一个回表的过程数据
3. 总结
能够本身试一下, 在插入数据的时候, 主键id能够不按着顺序插入, 咱们会发现, myisam在插入以后, 主键id的顺序没有变, 可是, innodb的数据是根据主键id排好序的, 这就是由于, innodb的索引和数据是在一块儿的, B+Tree叶子节点会排序, 因此在插入的时候会根据主键id排好序,
咱们一般用的表数据引擎通常都是innodb, 在构建索引的时候, 普通索引, 查出来的都是对应数据的主键, 而后根据主键去查询的数据, 这里面存在一个回表的过程, 并且主键在排序的时候是按顺序排的, 用整型去查询和排序确定是最快的, 因此, 因而可知, 主键最好是, 用一个自增的id, 这样查询的会很快, 并且有这个回表, 咱们也能够在查询表的时候, 根据普通索引先去查询id, 再根据id去查询想要的数据, 这样就能避免回表, 尤为是在分页, 页数比较大的时候, 效果很明显
数据量越大的的时候InnoDb的抗压能力就越明显, 效果会更好
我表达的可能不是很清楚, 请大佬们指点, 哦对了, 上述截图, 都是我看的 < 柳峰 >大佬的视频的时候截下来的图, 直接用了
小李大人
爱生活爱慧姐
2021年3月3日