mysql 的Myisam和InnoDB的索引结构

今天更深刻的研究了一下索引, 就把我研究的东西给你们分享一下吧, 欢迎大佬指正视频

先建立两个表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日