MyISAM索引方案

在InnoDB中索引即数据,也就是聚簇索引的B+树叶子节点已经包含了所有完整的用户记录,MyISAM的索引方案虽然也是树形结构,但是将索引和数据分开存储

  • 将表中的记录按记录的插入顺序单独存储在一个文件中【数据文件】,这个文件不划分数据页,有多少塞多少,可以通过行号快速访问一条记录

  • 把索引信息单独存储到另一个文件【索引文件】,会为表的主键单独创建一个索引,但在索引的叶子节点存储的不是完整的用户记录【主键值+行号】,通过索引找到行号,再通过行号找记录【一次回表操作】【相当于MyISAM建立的索引全是二级索引】

  • 也需要记录头信息来存储一些额外数据

  • 插入数据时没有按主键大小排序,不能使用二分法查找

  • 也可以为其他列分别建立索引或建立联合索引,原理与InnoDB相似,但在叶子节点处存储的是列+行号

  • “索引是索引,数据是数据”
    MyISAM行格式有定长记录格式、变长记录格式、压缩记录格式等,图6-18index_demo表采用定长记录格式,即一条记录占用的存储空间是固定的,这样就可以使用行号算出某条记录在数据文件的地址偏移量。变长记录格式MyISAM会直接在索引叶子节点处存储该条记录在数据文件中的地址偏移量【回表操作很快,直接拿地址偏移量到文件取数据,而InnoDB是获取主键后再去聚簇索引中找记录,相对来说慢一点】

你可能感兴趣的:(mysql,mysql,数据库)