• MySQL阅读笔记——7.InnoDB表空间


      二级索引B+树 形式保存在表空间(表名.ibd 文件),InnoDB为不同的页面设置的了不同的类型。这些类型记录在每个页面头部的 FIL_PAGE_TYPE位(两字节)

       为单位分配和存储数据,在 B+树 的每一层节点间形成的双向链表间的 物理位置 可能会很远,大量的 随机I/O 会降低查询存储效率,因此应该尽量让链表中相邻的页的 物理位置 也尽量相邻,这样 范围查询 的的时候进行 顺序I/O 可以大大提升效率,所以提出了 的概念,当表中的数据量大到一定程度(32个独立页面)后,再为索引分配空间就按照 来分配,

    所谓 范围查询 就在索引的叶子节点中定位到最小值和最大值,然后顺序扫描

      表空间 中,对16KB的页来说,连续的64个页就是一个 (extent),占用1MB,不论是 系统表空间 还是 独立表空间 都可以看成是若干的 组成的,每256个区被划分成一个 (实际上因为InnoDB设计者想通过一个页面管理(存储)一些页面的元数据,受单张页面16KB大小的影响,除去其他必要元数据信息外(如:FileHeader,FileTrailer等)存储一个页面的元数据的 XDES Entry 需要40字节,故最多只能存储256个 XDES Entry 结构(256个区以后再使用一个新的页面去管理之后的256个区),最终就形成了以256个区为一个 作为一个管理单元(其实就是单页面的XDES的管理范围是256个区))

      因为 范围查询 要顺序要扫描 B+树的 叶子节点 因此为了查询效率,将叶子节点和内节点分配的区,区别对待,存放叶子节点的区的集合为一个 (segment),存放内节点的区的集合为另一个 ,也就说一个索引有两个 一个 叶子节点段 ,一个 非叶子节点段 (内节点段)

    是一个逻辑概念,刚开始插入数据,段是以 碎片区 的单个页面为单位来分配空间,当 占用了32个独立的碎片页面后,再分配空间就是以为完整的区为单位了,也就是说,段=碎片区页面+区;分为两个段是为了将叶子节点数据尽可能的顺序存储,减少 随机I/O

  • 相关阅读:
    详解package-lock.json的作用
    Cisco计网实验配置总结
    使用Vue制作了一个计算机网络中子网划分部分的简陋计算工具
    Prettier-Code Formater代码格式化插件使用教程
    Node.js中npx命令的使用方法、场景
    从几道题目带你深入理解Event Loop_宏队列_微队列
    简单模拟实现javascript中的call、apply、bind方法
    git使用说明书
    使用闭包模拟实现AMD模块化规范
    if执行后else if即使满足条件也不再执行
  • 原文地址:https://www.cnblogs.com/leon618/p/13783299.html
Copyright © 2020-2023  润新知