美文网首页
4. 聚簇索引(一级)与非聚簇索引(二级)

4. 聚簇索引(一级)与非聚簇索引(二级)

作者: lj72808up | 来源:发表于2021-04-26 11:35 被阅读0次

    1. 什么叫聚蔟

    聚簇指将索引和数据放在一起, 因此:

    • 聚簇索引:将数据存储与索引放到了一块,找到索引也就找到了数据
    • 非聚簇索引:将数据存储于索引分开结构,索引结构的叶子节点指向了数据的对应行(innodb中叶子节点给出聚簇索引的值)

    2. 聚簇索引与主键

    主键在 mysql 中是很重要的.

    • 聚簇索引默认是主键
    • 如果表中没有定义主键, 会选择表中唯一的非空索引代替.
    • 如果没有这样的索引, InnoDB 会隐式定义一个主键来作为聚簇索引

    聚簇索引重要是因为. 其它类型的索引, 叶子节点记录的都是聚簇索引的值, 只有聚簇索引的叶子节点记录的行的物理存储位置. 因此, 使用其它索引查找记录都要经过两步:

    1. 查找该索引对应的聚簇索引值
    2. 查找该聚簇索引对应的行物理地址

    每次使用辅助索引检索都要经过两次B+树查找

    3. 为什么主键是自增主键

    • 为什么主键通常建议使用自增id
      聚簇索引的数据物理存放顺序与索引顺序一致.即:只要索引是相邻的,那么对应的行数据也一定是相邻的存放在磁盘上。如果主键不是自增id,那么会不断地调整数据的物理地址、分页,当然也有其他一些措施来减少这些操作,但却无法彻底避免。但如果是自增的,那就简单了,它只需一页一页地写,索引结构相对紧凑,磁盘碎片少,效率也高。
    • 为什么使用 UUID 作为主键会大幅度降低效率
      UUID 作为主键, 导致相邻的聚簇索引值生成在不同的叶子节点. 因此在调入一个节点的聚簇索引数据时, 会造成严重的缺页.

    相关文章

      网友评论

          本文标题:4. 聚簇索引(一级)与非聚簇索引(二级)

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