【InnoDB数据存储结构】第3章节:区、段、碎片区和表空间

本文详细解释了InnoDB数据库中区、段、碎片区和表空间的概念,强调了它们在减少随机I/O、提高查询效率和空间利用率方面的作用,以及独立表空间和系统表空间的区别和管理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录结构

在这里插入图片描述

区、段、碎片区和表空间

  • 什么是区?
  • 什么是段?
  • 什么是碎片区?
  • 什么是表空间?

在上文 InooDB 存储行格式一文中已经大致讲述过,再来回顾一下,直接上图:

名词解释如下:

  • 行(row): 数据库中的数据都是按行(row)存储的,行记录(统称)根据不同的 行格式 ,有不同的存储结构。
  • 页(page): 记录是按行存储的,但是数据库的读取并不是以 为单位,而是以 为单位, 每页的大小为 16KB ,否则读取一次只能读取一行数据(也就是一次 I/O 操作),只能处理一行数据,效率太低了。
  • 区(extent): B+Tree 的每一层的节点之间都是通过双向链表链接的,以页为单位,相邻的两个页之间位置并不是连续的,可能离的非常远,那么数据量大的情况在查询的时候就会产生大量的随机 I/O 操作(效率低)。为了解决这个问题,为某个索引分配空间的时候按照 为单位,一个区的大小为 1MB,对于 16KB大小的页来说,连续的 64 个页划分为一个 ,这样就使得相邻的页的物理位置也是相邻的,就可以使用 顺序 I/O 了。
  • 段(segment): 表空间由多个段组成,段是由多个区组成。段一般分为 数据段 索引段 回滚段 等。
    • 数据段:存放 B+Tree 叶子节点区的集合
    • 索引段:存放 B+Tree 非叶子节点区的集合
    • 回滚段:存放回滚数据区的集合(MVCC 就是利用了回滚段实现了多版本查询控制)
  • 表空间(Tablespace): 是一个逻辑容器,表空间存储的对象是段,在一个空间中可以由一个段或多个段,但是一个段只能属于一个表空间。

为什么要有区?

B+Tree的每一层的节点之间都是通过双向链表链接的,以 页为单位 为单位分配存储空间,相邻的两个页之间位置并不是连续的,可能离的非常远。

B+Tree 索引适用的场景提到在范围查询时,只需要定位到最左边和最右边的记录(顺序存储),然后沿着双向链表一直扫描就可以了,而如果链表中相邻的两个数据页的物理位置相差的很远,中间的查询产生的就是 随机 I/O

磁盘的速度和内存的速度差了好几个量级, 随机 I/O 是非常慢的

为了能够使用 顺序 I/O ,尽量让链表中相邻的页的物理位置也相邻,这就引入了 的概念,一个区在物理位置上就是连续的 64 个页 。因为 InooDB 的一个页默认大小为 16KB,所以一个区的大小为 1MB

在表中数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一宿君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值