数据库中的 Segment、Extent、Page、Row 详解

在关系型数据库的底层存储架构中,数据并不是随意写入磁盘,而是按照一定的结构分层管理的。理解这些存储单位对于优化数据库性能、理解 SQL 执行过程以及排查性能问题都具有重要意义。

我将从宏观到微观,依次介绍数据库存储中的四个核心概念:

  • Segment(段)
  • Extent(区)
  • Page(页)
  • Row(行)

1. Segment(段)

Segment 是数据库中用于表示一个完整数据对象(如表、索引等)在磁盘上所占据的所有空间的逻辑集合。

特点:

  • 一个 segment 对应一个数据库对象,比如某个表或某个索引。
  • 由多个 extent 组成。
  • 会随着数据的增加自动扩展(例如 MySQL InnoDB 会自动分配更多 extent)。
  • 通常一个 segment 属于一个表空间(tablespace)。

举例:

  • 创建一个新表 user,数据库系统就会为它分配一个 segment。
  • 插入数据后,该 segment 会动态增长,向系统请求更多的 extent。

2. Extent(区)

Extent 是一组连续的页(Page),是数据库分配磁盘空间的基本单位。

特点:

  • 一般是固定大小(比如 InnoDB 默认是 1MB)。
  • 多个 extent 组成一个 segment。
  • 避免了频繁地按页分配所带来的碎片问题。

举例(不同数据库的实现可能略有不同):

  • MySQL InnoDB:一个 extent 通常由 64 个 16KB 的页组成,即一个 extent 大小为 1MB。
  • SQL Server:一个 extent 是 8 个 8KB 页,即 64KB。

3. Page(页)

Page(页) 是数据库中 最小的I/O单位,数据的读取和写入都是以页为单位进行的。

特点:

  • 每页固定大小(常见为 8KB、16KB)。
  • 一个 extent 中包含若干页。
  • 页中除了数据之外,还包含头部(元数据)、行目录等信息。

4. Row(行)

Row(行) 是我们最熟悉的数据单位,即表中的一条记录,最终被存储在页(Page)中。

特点:

  • 一页中通常可以存储多行数据。
  • 行的格式有固定长度和可变长度两种。
  • 若某一行太大,不能完全放入一个页中,系统会使用溢出页或外部存储机制(如 PostgreSQL 的 TOAST、MySQL 的 BLOB)。

优化建议:

  • 行长度影响页能装多少行,从而影响索引性能和缓存命中率。
  • 尽量避免一行中包含超大字段,建议单独设计表进行拆分。

总结:四者关系图

层级说明示例大小(InnoDB)
Segment表或索引的所有空间总和N/A
Extent一组连续的页1MB(64个16KB页)
Page数据读写的最小单位16KB
Row表中的一条记录变长(数十~数千字节)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/82567.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DAMA车轮图

DAMA车轮图是国际数据管理协会(DAMA International)提出的数据管理知识体系(DMBOK)的图形化表示,它以车轮(同心圆)的形式展示了数据管理的核心领域及其相互关系。以下是基于用户提供的关键词对D…

《QDebug 2025年4月》

一、Qt Widgets 问题交流 1. 二、Qt Quick 问题交流 1.QML单例动态创建的对象,访问外部id提示undefined 先定义一个窗口组件,打印外部的id: // MyWindow.qml import QtQuick 2.15 import QtQuick.Window 2.15Window {id: controlwidth: …

JS | 正则 · 常用正则表达式速查表

以下是前端开发中常用的正则表达式速查表,包含验证规则、用途说明与示例: 📌 常用正则表达式速查表 名称正则表达式描述 / 用途示例手机号/^1[3-9]\d{9}$/中国大陆手机号13812345678 ✅座机号/^0\d{2,3}-?\d{7,8}$/固定电话010-12345678 ✅…

系统思考:个人与团队成长

四年前,我交付的系统思考项目,今天学员的反馈依然深深触动了我。 我常常感叹,系统思考不仅仅是一场培训,更像是一场持续的“修炼”。在这条修炼之路上,最珍贵的,便是有志同道合的伙伴们一路同行&#xff0…

写屏障和读屏障的区别是什么?

写屏障(Write Barrier)与读屏障(Read Barrier)的区别 在计算机科学中,写屏障和读屏障是两种关键的内存同步机制,主要用于解决并发编程中的可见性、有序性问题,或在垃圾回收(GC&…

ssh -T git@github.com 测试失败解决方案:修改hosts文件

问题描述 通过SSH方式测试,使用该方法测试连接可能会遇到连接超时、端口占用的情况,原因是因为DNS配置及其解析的问题 ssh -T gitgithub.com我们可以详细看看建立 ssh 连接的过程中发生了什么,可以使用 ssh -v命令,-v表示 verbo…

大疆无人机搭载树莓派进行目标旋转检测

环境部署 首先是环境创建,创建虚拟环境,名字叫 pengxiang python -m venv pengxiang随后激活环境 source pengxiang/bin/activate接下来便是依赖包安装过程了: pip install onnxruntime #推理框架 pip install fastapi uvicorn[standard] #网络请求…

00 Ansible简介和安装

1. Ansible概述与基本概念 1.1. 什么是Ansible? Ansible 是一款用 Python 编写的开源 IT 自动化工具,主要用于配置管理、软件部署及高级工作流编排。它能够简化应用程序部署、系统更新等操作,并且支持自动化管理大规模的计算机系统。Ansibl…

Linxu实验五——NFS服务器

一.NFS服务器介绍 NFS服务器(Network File System)是一种基于网络的分布式文件系统协议,允许不同操作系统的主机通过网络共享文件和目录3。其核心作用在于实现跨平台的资源透明访问,例如在Linux和Unix系统之间共享静态数据&#…

『 测试 』测试基础

文章目录 1. 调试与测试的区别2. 开发过程中的需求3. 开发模型3.1 软件的生命周期3.2 瀑布模型3.2.1 瀑布模型的特点/缺点 3.3 螺旋模型3.3.1 螺旋模型的特点/缺点 3.4 增量模型与迭代模型3.5 敏捷模型3.5.1 Scrum模型3.5.2 敏捷模型中的测试 4 测试模型4.1 V模型4.2 W模型(双V…

红外遥控键

红外 本章节旨在让用户自定义红外遥控功能,需要有板载红外接收的板卡。 12.1. 获取红外遥控键值 由于不同遥控器厂家定义的按键键值不一样,所以配置不通用,需要获取实际按键对应的键值。 1 2 3 4 5 6 #设置输出等级 echo 7 4 1 7> /pr…

同一个虚拟环境中conda和pip安装的文件存储位置解析

文章目录 存储位置的基本区别conda安装的包pip安装的包 看似相同实则不同的机制实际路径示例这种差异带来的问题如何检查包安装来源最佳实践建议 总结 存储位置的基本区别 conda安装的包 存储在Anaconda(或Miniconda)目录下的pkgs和envs子目录中: ~/anaconda3/en…

机器学习极简入门:从基础概念到行业应用

有监督学习(supervised learning) 让模型学习的数据包含正确答案(标签)的方法,最终模型可以对无标签的数据进行正确处理和预测,可以分为分类与回归两大类 分类问题主要是为了“尽可能分开整个数据而画线”…

split和join的区别‌

split和join是Python中用于处理字符串的两种方法,它们的主要区别在于功能和使用场景。‌ split()方法 ‌split()方法用于将字符串按照指定的分隔符分割成多个子串,并返回这些子串组成的列表‌。如果不指定分隔符,则默认分割所有的空白字符&am…

MySQL从入门到精通(二):Windows和Mac版本MySQL安装教程

目录 MySQL安装流程 (一)、进入MySQL官网 (二)、点击下载(Download) (三)、Windows和Mac版本下载 下载Windows版本 下载Mac版本 (四)、验证并启动MySQL …

LeetCode 解题思路 45(分割等和子集、最长有效括号)

解题思路: dp 数组的含义: 在数组中是否存在一个子集,其和为 i。递推公式: dp[i] | dp[i - num]。dp 数组初始化: dp[0] true。遍历顺序: 从大到小去遍历,从 i target 开始,直到 …

电影感户外哑光人像自拍摄影Lr调色预设,手机滤镜PS+Lightroom预设下载!

调色详情 电影感户外哑光人像自拍摄影 Lr 调色,是借助 Lightroom 软件,针对户外环境下拍摄的人像自拍进行后期处理。旨在模拟电影画面的氛围与质感,通过调色赋予照片独特的艺术气息。强调打造哑光效果,使画面色彩不过于浓烈刺眼&a…

使用 NV‑Ingest、Unstructured 和 Elasticsearch 处理非结构化数据

作者:来自 Elastic Ajay Krishnan Gopalan 了解如何使用 NV-Ingest、Unstructured Platform 和 Elasticsearch 为 RAG 应用构建可扩展的非结构化文档数据管道。 Elasticsearch 原生集成了行业领先的生成式 AI 工具和提供商。查看我们的网络研讨会,了解如…

Android 13 使能user版本进recovery

在 debug 版本上,可以在关机状态下,同时按 电源键 和 音量加键 进 recovery 。 user 版本上不行。 参考 使用 build 变体 debug 版本和 user 版本的差别之一就是 ro.debuggable 属性不同。 顺着这个思路追踪,找到 bootable/recovery/reco…

每日算法刷题计划

这是我每天坚持刷算法题的仓库,每天刷1-3道,时间30-40min,加油! 目前考虑leetcode洛谷形式,c和python3语言,leetcode主要学核心思想,洛谷学会输入输出格式 每日打卡:markdowncsdn打卡 刷题策略: 按分类刷…