美文网首页
MySQL - 存储引擎对索引的组织方式

MySQL - 存储引擎对索引的组织方式

作者: kyo1992 | 来源:发表于2021-04-14 08:30 被阅读0次

    MyISAM

    MySQL数据以文件形式存放在磁盘,对于MyISAM引擎,每张表由三个文件组成。

    • table.frm:存储表的结构。(frame)
    • table.MYD:存储表的数据。(data)
    • table.MYI:存储表的索引。(index)

    MyISAM索引文件和数据文件是分离的(非聚集)

    如上图,B+树的叶子节点存储的值是磁盘地址,根据磁盘地址到MYD文件去获取数据。

    InnoDB

    对于InnoDB引擎,每张表由两个文件组成。

    • table.frm:存储表的结构。(frame)
    • table.ibd:存储表的索引和数据。(index和data)

    InnoDB索引文件和数据文件是聚集的

    聚集索引
    • 表数据文件本身就是按B+树组织的一个索引结构文件。
    • 聚集索引 - 叶节点包含了完整的数据记录,每个表有且只有一个聚集索引(主键索引),如果建表的时候没有指定主键,MySQL会自动维护一个唯一的隐藏列,以建立聚集索引B+树。所以InnoDB表必须建立主键,并且推荐使用自增的整型主键。
    非聚集索引

    对于非聚集索引(索引和数据是分离的),叶节点存储的是索引所在行记录的主键,所以根据非聚集索引查找到主键后,需要回表再查找主键的行记录。 只存储主键值,可以保持一致性和减少存储空间。


    联合索引
    联合索引底层存储结构

    例如有三个字段name,age,position组成联合索引,MySQL会根据字段出现先后顺序依次排序,例如先按name排序,name相同再按age排序,根据这个原理,可以应用最左前缀原则优化。

    相关文章

      网友评论

          本文标题:MySQL - 存储引擎对索引的组织方式

          本文链接:https://www.haomeiwen.com/subject/prgwkltx.html