• 各类索引-尚


    索引是一种储存方式

    要查一张表,效率与时间复杂度硬盘IO有关,索引就是为了提高效率。

    • 选择搜索二叉树减少时间复杂度
    • 每个节点都可以看做一张表,如果这棵树太高,硬盘IO次数过多,所以选择搜索二叉树中的B+树
      在这里插入图片描述
      只有叶子节点会储存数据,非叶子节点作为目录项存在。
      每一层节点都有双向链表连接。

    聚簇索引、非聚簇索引、联合索引

    都是InnoDB引擎

    • 聚簇索引是主键作为关键字,叶子节点包含所有的信息
    • 非聚簇是按照其他属性作为关键字,叶子中包含主键关键字两条
    • 联合索引 根据多个属性作为关键字,叶子包括主键关键字两条
    • 总结
      • 一个表只有一个聚合索引,可以有多个非聚簇索引
      • 如果没有主键,聚合索引会选择唯一属性,如果都没有,系统会隐式设置长整型主键
      • 主键不要太大,因为非聚簇也包含主键,尽量自增
      • 非聚簇不影响数据物理结构
      • 非聚簇的数据修改快于聚簇,但查找慢于聚簇(回表的原因)
    • MyISAM引擎
    • 它的索引只有一种,关键字任意属性(主键可有可无),叶子节点储存的是关键字和表项地址,这样它无论怎样都会回表,但它的回表是拿着地址去找对应表项

    操作

    • 创建
      通过关键字升序。刚开始只有根节点A,当一个根节点中的页面不够时,会赋值一份相同的页面B,然后新建一个空白页面C,A更改为目录项,B和C来储存数据(页分裂)
    • 插入
      如果是随机关键字插入,有可能要修改一些页内的很多内容,所以推荐自增。
    • 查找
      InnoDB:如果您要按照非主键属性来查找信息,会先通过非聚簇来找到对应主键,再通过聚簇索引来找到信息(回表)

    代价

    所以,代价是什么?

    • 空间:需要空间来储存目录
    • 时间:需要时间来维护目录项
  • 相关阅读:
    【2022全网最全教程】接口调试神器:Postman 从入门到进阶教程(万字长文)
    freeswitch 使用 silero-vad 静音拆分使用 fastasr 识别
    [iOS]-weak底层原理(sidetable相关,附带引用计数原理)
    【解放双手】Auto Lidar2Cam Calibration——相机雷达自动标定
    高斯分布-最大似然估计公式白板推导
    python中“_“用法
    java基础入门(一)
    SQL Server进阶知识
    Vue2源码-diff算法详解
    vben admin 中 BasicTable 组件 useTable 的使用
  • 原文地址:https://blog.csdn.net/qq_51682771/article/details/126468027