• Mysql聚簇和非聚簇索引的区别


    都是B+树的数据结构

    聚簇索引:

    数据存储与索引放到了⼀块、并且是按照⼀定的顺序组织的,找到索引也就找到了数
    据,数据的 物理存放顺序与索引顺序是⼀致的 ,即:只要索引是相邻的,那么对应的数据⼀定也是
    相邻地存放在磁盘上的

    ⾮聚簇索引:

    叶⼦节点不存储数据、存储的是 数据⾏地址 ,也就是说根据索引查找到数据⾏的位置
    再取磁盘查找数据,这个就有点类似⼀本树的⽬录,⽐如我们要找第三章第⼀节,那我们先在这个
    ⽬录⾥⾯找,找到对应的⻚码后再去对应的⻚码看⽂章。

    优势:

    1 、查询通过聚簇索引可以直接获取数据,相⽐⾮聚簇索引需要第⼆次查询(⾮覆盖索引的情况
    下)效率要⾼
    2 、聚簇索引对于范围查询的效率很⾼,因为其数据是按照 ⼤⼩排列
    3 、聚簇索引适合⽤在 排序 的场合,⾮聚簇索引不适合

    劣势:

    1 维护索引很昂贵,特别是 插⼊新⾏ 或者 主键被更新导⾄要分⻚ (page split)的时候。建议在⼤量插⼊新⾏后,选在负载较低的时间段,通过OPTIMIZE TABLE优化表,因为必须被移动的⾏数据可能造成碎⽚。使⽤独享表空间可以弱化碎⽚
    2 、表因为使⽤UUId(随机ID)作为主键,使 数据存储稀疏 ,这就会出现聚簇索引有可能有⽐全表扫⾯更慢,所以建议使⽤int的auto_increment作为主键
    3 、如果主键⽐较⼤的话,那辅助索引将会变的更⼤,因为辅助索引的叶⼦存储的是主键值;过⻓的主键值,会导致⾮叶⼦节点占⽤占⽤更多的物理空间

    InnoDB

    InnoDB中⼀定有主键,主键⼀定是 聚簇索引 ,不⼿动设置、则会使⽤ unique 索引,没有unique索引,则会使⽤数据库内部的⼀个⾏的隐藏id来当作主键索引。在聚簇索引之上创建的索引称之为辅助索引 辅助索引访问数据总是需要 ⼆次查找 ,⾮聚簇索引都是辅助索引,像 复合索引 前缀索引 唯⼀索引 辅助索引叶⼦节点存储的不再是⾏的物理位置,⽽是主键值

    MyISM:

    MyISM使⽤的是⾮聚簇索引,没有聚簇索引,⾮聚簇索引的两棵B+树看上去没什么不同,节点的结构完全⼀致只是存储的内容不同⽽已,主键索引B+树的节点存储了主键,辅助键索引B+树存储了辅助键。表数据存储在独⽴的地⽅,这两颗B+树的叶⼦节点都使⽤⼀个地址指向真正的表数据,对于表数据来说,这两个键没有任何差别。由于 索引树是独⽴的 ,通过辅助键检索⽆需访问主键的索引树。

    优势:

    如果涉及到 ⼤数据量的排序 全表扫描 count 之类的操作的话,还是MyISAM占优势些,因为索引所占空间⼩,这些操作是需要在内存中完成的。

     

  • 相关阅读:
    SmartCode ViewerX VNC 3.11 Crack
    回应张逸老师(二)小甜甜和牛夫人?
    Cilium系列-13-启用XDP加速及Cilium性能调优总结
    leetcode 136. 只出现一次的数字
    SAP 下载SMW0模板文件并附加数据导入到Excel示例
    使用rna-seq定量软件salmon运行index步骤遇到的一个问题(计算集群slurm)
    【java学习—九】内部类(7)
    EDA实验------数控分频器设计(QuartusII)
    1.2 异步相关概念:深入了解
    1500*C1. Potions (Easy Version)(贪心&优先队列)
  • 原文地址:https://blog.csdn.net/m0_70734549/article/details/126230024