网站建设公司推荐北京华网/湖北seo整站优化

网站建设公司推荐北京华网,湖北seo整站优化,网站建设评估及分析,电子商务网站建设总结与体会Innodb记录结构 InnoDB记录结构深度解析一、InnoDB存储基础单元:页(Page)二、行格式(Row Format) 三、核心行格式详解1. Compact行格式结构组成: 2. Redundant行格式(兼容旧版本)核心…

Innodb记录结构

      • InnoDB记录结构深度解析
        • 一、InnoDB存储基础单元:页(Page)
        • 二、行格式(Row Format)
      • 三、核心行格式详解
        • 1. Compact行格式
          • 结构组成:
        • 2. Redundant行格式(兼容旧版本)
          • 核心差异:
        • 3. Dynamic与Compressed行格式
        • **适用场景差异**
      • 四、行溢出处理机制
      • 五、关键对比与选型建议
      • 六、总结

InnoDB记录结构深度解析

一、InnoDB存储基础单元:页(Page)
  • 页大小:默认16KB,是InnoDB磁盘与内存交互的基本单位。

  • 页作用:所有数据读写操作以页为单位,避免频繁磁盘IO,提升性能。

二、行格式(Row Format)

InnoDB提供4种行格式:CompactRedundantDynamicCompressed。核心区别在于数据存储方式和溢出处理机制。


三、核心行格式详解

1. Compact行格式

在这里插入图片描述

结构组成:
  1. 变长字段长度列表(Variable-Length Field Length List)

    1. 逆序存储:所有变长字段(如VARCHAR)的真实数据长度按列顺序逆序存放。

    2. 长度表示规则

  • 若最大长度 ≤ 255字节,用1字节表示实际长度。

  • 若最大长度 > 255字节,根据实际长度选择1或2字节(L≤127用1字节,L>127用2字节)。

  1. NULL值列表(NULL Value List)

    1. 二进制位图:每个允许NULL的列对应1位(1表示NULL,0非NULL),按列逆序排列。

    2. 字节对齐:不足8位补0,例如3个NULL列用1字节(二进制高位补0)。

  2. 记录头信息(Record Header)

    1. 固定5字节,关键标志位:
  • delete_mask:标记记录是否被删除。

  • next_record:下一条记录的相对位置(链表结构)。

  • record_type:记录类型(0-普通,1-B+树非叶节点,2-最小记录,3-最大记录)。

  1. 真实数据(Real Data)

    1. 隐藏列:自动添加row_id(可选)、transaction_id(事务ID)、roll_pointer(回滚指针)。

    2. CHAR(M)存储

  • 定长字符集(如ascii):固定占用M×字符字节,不足填充空格。

  • 变长字符集(如utf8):长度存入变长字段列表,至少占用M字节。

相比redundant的改进:

  • Compact仅存储非NULL变长字段的实际字节长度(逆序排列),redundant存储所有字段偏移地址

  • Compact使用位图标记NULL列(每列1位),例如3个允许NULL的列仅需1字节存储状态。Redundant则通过偏移量高位标记NULL,每个允许NULL的列需额外占用偏移量空间

  • Compact头信息5字节 包含delete_maskrecord_type等核心字段,支持更细粒度的记录管理。redundant头信息6字节,额外包含n_field(列数量)和1byte_offs_flag(偏移量字节数标识),缺少record_type字段

  • 发生行溢出:Compact保留768字节前缀,redundant无优化机制直接存额外页导致更多空间碎片


2. Redundant行格式(兼容旧版本)

在这里插入图片描述

核心差异:
  • 字段长度偏移列表:所有列(含隐藏列)的结束位置偏移量,逆序存储,通过差值计算列长。

  • NULL处理:偏移量首比特标记NULL,定长列NULL仍占空间(填充0x00),变长列不占。

  • 记录头信息

    • 6字节,含n_field(列数量)和1byte_offs_flag(偏移量字节数标记)。

    • record_type字段。


3. Dynamic与Compressed行格式
  • Dynamic:类似Compact,但所有溢出数据存于溢出页,仅保留20字节指针。

  • Compressed:在Dynamic基础上增加页级压缩,减少存储空间。

适用场景差异
  • Dynamic的优势场景

    • 适用于超长变长字段(如TEXT/BLOB),溢出数据占比高时,减少原始页空间浪费。

    • 不适用场景:若记录长度普遍小于页容量(16KB),Dynamic与Compact性能差异不大。

  • Compressed的优势场景

    • 适合存储成本敏感、读多写少的场景(如日志归档、历史数据存储)。

    • 不适用场景:OLTP系统(高频更新)、或CPU资源紧张时,压缩开销可能成为瓶颈。


四、行溢出处理机制

  • 溢出条件:单行数据超过页大小(16KB)阈值(约768字节后存溢出页)。

  • 溢出页管理

    • 仅保留前缀数据(768字节)在本页,剩余数据存入溢出页。

    • 通过指针链接溢出页,保证主页数据连续性。


五、关键对比与选型建议

特性CompactRedundantDynamic
变长字段存储仅变长字段长度列表全字段偏移列表类似Compact
NULL处理独立NULL列表偏移量首比特标记同Compact
溢出处理部分保留前缀同Compact全部存溢出页
空间效率较低
适用场景常规OLTP旧系统兼容大字段频繁更新

格式适用场景不适用场景
Compact通用场景,短记录为主,兼容旧版本大字段频繁访问,存储成本敏感
Dynamic超长变长字段(TEXT/BLOB),溢出数据占比高记录普遍短小,需避免溢出页I/O开销
Compressed读多写少,存储成本敏感(如归档数据)高频写入、CPU资源紧张、OLTP系统

六、总结

  1. 行格式选择:默认使用Dynamic(MySQL 5.7+),平衡空间与性能。

  2. CHAR vs VARCHAR

    1. CHAR适合定长数据(如MD5),减少碎片。

    2. VARCHAR节省空间,但频繁更新可能产生碎片。

  3. 避免行溢出:大字段(如TEXT/BLOB)建议分离存储或使用压缩。

  4. NULL优化:尽量使用NOT NULL,减少NULL列表开销。

通过理解InnoDB记录结构,可针对性优化表设计,提升存储效率与查询性能。

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

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

相关文章

Deepin(Linux)安装MySQL指南

1.下载 地址:https://downloads.mysql.com/archives/community/ 2.将文件解压到 /usr/local 目录下 先cd到安装文件所在目录再解压,本机是cd /home/lu01/Downloads sudo tar -xvJf mysql-9.2.0-linux-glibc2.28-x86_64.tar.xz -C /usr/local3.创建软链…

Visual Studio更新说明(关注:.NET+AI生产力)

Ver V0.0:Visual Studio 2022 v17.12更新:.NET9AI生产力 AI插件推荐 (1)腾讯云AI代码手(内含了DeepSeek-R1),目前免费,但收费我也可能会买。 AI插件!推荐 (1)百度的…

java基于数组实现队列(四)

概述 实现我上一篇博客中提到的 实际上,就是用synchronized代码块解决线程安全问题,以及利用wait()、notify()实现线程阻塞、唤醒。 实现 pollV3() private Object lockBySynchronizednew Object();public int pollV3() {synchronized (lockBySynchr…

DeepSeek各模型现有版本对比分析

文章目录 一、基础模型系列:V1 到 V3 的演进二、专用模型系列:推理与多模态三、版本选型与商业化趋势 DeepSeek作为最近特别火爆的模型,本文将对DeepSeek现有的主要版本进行对比分析,涵盖参数规模、训练数据、功能改进、应用场景和性能表现等…

现场可以通过手机或者pad实时拍照上传到大屏幕的照片墙现场大屏电子照片墙功能

现场可以通过手机或者pad实时拍照上传到大屏幕的照片墙现场大屏电子照片墙功能,每个人都可以通过手机实时拍照上传到大屏幕上,同时还可以发布留言内容,屏幕上会同步滚动播放展示所有人的照片和留言。相比校传统的照片直播功能更加灵活方便,而…

项目管理工具Jira在营销工作管理中的应用与实践

本文由Atlassian全球白金合作伙伴-龙智编辑整理。 市场营销人员是维系组织团结的粘合剂。作为公司中最具协作精神的团队之一,他们确保每个人目标一致,并专注于客户真正的需求。他们擅长沟通协作,积极响应客户诉求及塑造品牌方向,…

基于Flask框架的食谱数据可视化分析系统的设计与实现

【Flask】基于Flask框架的食谱数据可视化分析系统的设计与实现 (完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 在当今数字化时代,信息可视化已成为一种高效的数据理解和传播手段。…

基于 DeepSeek + Gemeni 打造 AI+前端的多人聊天室

开源项目 botgroup.chat 介绍 AI 多人聊天室: 一个基于 React 和 Cloudflare Pages(免费一键部署) 的多人 AI 聊天应用,支持多个 AI 角色同时参与对话,提供类似群聊的交互体验。体验地址:https://botgroup.chat 开源仓库&#x…

详解单例模式、模板方法及项目和源码应用

大家好,我是此林。 设计模式为解决特定问题提供了标准化的方法。在项目中合理应用设计模式,可以避免重复解决相同类型的问题,使我们能够更加专注于具体的业务逻辑,减少重复劳动。设计模式在定义系统结构时通常考虑到未来的扩展。…

IOS UITextField 无法隐藏键盘问题

设置UITextField 键盘按钮返回键为“完成”,即return key 设置done .m代码设置代理 //设置代理协议 UITextFieldDelegate, self.mobileTextField.delegate self; ///点击完成键隐藏键盘 - (BOOL)textFieldShouldReturn:(UITextField *)textField{//取…

【深度学习】Unet的基础介绍

U-Net是一种用于图像分割的深度学习模型,特别适合医学影像和其他需要分割细节的任务。如图: Unet论文原文 为什么叫U-Net? U-Net的结构像字母“U”,所以得名。它的结构由两个主要部分组成: 下采样(编码…

RT-Thread+STM32L475VET6实现定时器定时功能

文章目录 前言一、板载资源介绍二、具体步骤1.打开STM32CubeMX进行相关配置1.1 使用外部高速时钟,并修改时钟树1.2 打开定时器(定时器根据自己需求调整)1.3 打开串口1.4 生成工程 2. 配置定时器2.1 打开HWTIMER设备驱动2.2 声明定时器2.3将stm32l4xx_hal_msp.c中HAL…

链表-基础训练(二)链表 day14

两两交换链表中的节点 题目示意: 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 原先我的思路是图像上的思路,但是我感觉还是很复杂…

【Gin-Web】Bluebell社区项目梳理5:投票功能分析与实现

本文目录 一、投票功能投票流程实现代码redis投票 一、投票功能 投票流程 首先我们要明确,就是 谁(哪个用户:userID) 给 哪个帖子(postID) 投了 什么票(赞成票or反对票)。 赞成票…

vue-treeselect显示unknown的问题及解决

问题 解决办法 去node-modules包里面找到这个组件的源码,在它dist文件里面找到这个文件,然后搜索unknown,把它删掉就可以解决了。

MFC中CString的Format、与XML中的XML_SETTEXT格式化注意

1、在MFC中导入 "msxml6.dll",并使用其中的XML_SETTEXT函数,此调用在进行格式化的时候,调用的还是CString.Format()函数! 2、用double类型的数据,格式化整形数%d之前,必须将double强转为int&…

从零开始用react + tailwindcs + express + mongodb实现一个聊天程序(一)

项目包含5个模块 1.首页 (聊天主页) 2.注册 3.登录 4.个人资料 5.设置主题 一、配置开发环境 建立项目文件夹 mkdir chat-project cd chat-project mkdir server && mkdir webcd server npm init cd web npm create vitelatest 创建前端项目时我们选择javascrip…

具有整合各亚专科医学领域知识能力的AI智能体开发纲要(2025版)

整合各亚专科医学领域知识能力的AI代理的开发与研究 一、引言 1.1 研究背景 在科技飞速发展的当下,人工智能(AI)已成为推动各行业变革的关键力量,医疗领域也不例外。近年来,AI 在医疗行业的应用取得了显著进展,从医学影像诊断到疾病预测,从药物研发到个性化医疗,AI 技…

YOLO11 【四】 【DNF制作自己的数据集,切割视频以及labelimg 闪退问题】

一、问题labelimg 闪退 一点w打标 labelimg就闪退 **原因 : python 版本太高 ** 解决办法:单独创建一个虚拟环境用于打标 conda create -n labelimg python3.9 二、使用python脚本切割视频 # -*- coding: utf-8 -*- import cv2 import osdef video_…

[MDM 2024]Spatial-Temporal Large Language Model for Traffic Prediction

论文网址:[2401.10134] Spatial-Temporal Large Language Model for Traffic Prediction 论文代码:GitHub - ChenxiLiu-HNU/ST-LLM: Official implementation of the paper "Spatial-Temporal Large Language Model for Traffic Prediction" …