美文网首页
mysql 聚簇索引 非聚簇索引

mysql 聚簇索引 非聚簇索引

作者: 乌木山 | 来源:发表于2019-11-07 14:37 被阅读0次

    1 索引类型

    1.1 聚簇索引

    聚簇索引的叶子节点,存储就是数据节点。索引叶子节点的顺序和数据存储顺序一致。

    1.2 非聚簇索引

    非聚簇索引,叶子节点存储的是指向数据节点的指针。也就是说,数据节点无需和索引节点顺序保持一致。

    2 mysql 索引

    2.1 MyISAM

    MYISAM是按列值与行号来组织索引的。它的叶子节点中保存的是指向存放数据的物理块的指针。
    另外,从MYISAM存储的物理文件我们能看出,MYISAM引擎的索引文件(.MYI)和数据文件(.MYD)是相互独立的。


    MyISAM索引结构

    2.2 InnoDB
    mysql 的 InnoDB引擎,主键索引和二级索引的结构有所不同。
    InnoDB的主键索引是聚簇索引,因此走主键索引可以立即定位到数据所在位置。


    primary key

    而对于二级索引,其叶子节点存储的是索引key和主键值。因此二级索引首先查询到数据的主键值,然后再拿主键值到主键索引里查到对应的数据块。


    secondary key

    解释完聚簇索引和非聚簇索引,就很好理解两类索引查询数据的流程了:


    数据查询流程

    3 思考

    • InnoDB辅助键索引为什么存储的是主键值,而不直接存储指向数据的指针?
      如果存储数据指针的话,每次出现数据行移动或者数据页分裂时,都不得不同时更新二级索引指针。而存储主键值的话,则很好的避免了这一维护工作。

    4 参考资料

    https://blog.csdn.net/alexdamiao/article/details/51934917
    https://www.jianshu.com/p/54c6d5db4fe6
    https://blog.csdn.net/lisuyibmd/article/details/53004848

    相关文章

      网友评论

          本文标题:mysql 聚簇索引 非聚簇索引

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