MySQL之 表

2023-11-12

    表是关于特定实体的数据集合,这也是关系型数据库模型的核心。

1索引组织表

     在InnoDB存储引擎中,每张表都有一个主键(Primary Key),如果创建表时没有显示定义主键,则会按照如下方式创建主键:

  • 存在非空的唯一索引(Unique NOT NULL),则该列为主键。
  • 存在多个非空唯一索引时,会自动选择建表时第一个定义的非空唯一索引为主键。
  • 如不符合上述条件,会自动创建一个6字节大小的指针。

2. InnoDB存储结构

       从InnoDB存储引擎的逻辑结构看,所有数据都被逻辑存放在一个空间中,称为表空间。表空间又由段(segment)、区(extent)、页(page)组成。逻辑存储结构如下图:

 

                                                                       图2-1 InnoDB逻辑存储结构

2.1表空间

       每张表的表空间内存放的只是数据、索引和插入缓冲bitmap页,而回滚(undo)信息、插入缓冲索引页、系统事务信息、二次写缓冲(Double write buffer)存放在共享表空间中。

2.2段

      数据段是B+树的叶子节点,而索引段为B+树的非索引节点。

2.3区

     区是连续页组成的空间,在任何情况下每个区的大小都是1MB,如果默认页的大小是16KB,即一个区中一共有64个连续的页。

2.4页

     页是InnoDB磁盘管理的最小单位,默认为16KB,从1.2.x版本开始,可以通过参数innodb_page_size将页的大小设置成4K、8K或16K。

2.5行

     每个行存放记录是有硬性规定的,最多可放16KB / 2~200行的记录,即7992行条记录。

3 InnoDB行记录格式

                                                                                     图3-1 行结构图

1.Antelope: 先前未命名的,原始的InnoDB文件格式。它支持两种行格式:CompactRedundant。MySQL5.6的默认文件格式。可以与早期的版本保持最大的兼容性。不支持 Barracuda 文件格式。

2.Barracuda: 新的文件格式。它支持InnoDB的所有行格式,包括新的行格式:COMPRESSEDDYNAMIC(MySQL 5.7默认)。与这两个新的行格式相关的功能包括:InnoDB表的压缩,长列数据的页外存储和索引建前缀最大长度为3072字节。

      注:如果要修改现有表的行模式为compressed或dynamic,必须先将文件格式设置成Barracuda:set global innodb_file_format=Barracuda;,再用ALTER TABLE tablename ROW_FORMAT=COMPRESSED;去修改才能生效。

 

查看文件格式方式如下:

mysql> show variables like "innodb_file_format";

+--------------------+-----------+
| Variable_name      | Value     |
+--------------------+-----------+
| innodb_file_format | Barracuda |
+--------------------+-----------+
1 row in set (0.00 sec)

3.1 compact格式

表3-1 Compact行记录格式

变长字段长度列表

NULL标志位

记录头信息

列1数据

列2数据

列3数据

  • 变长字段长度列表:倒叙存放非NULL变长字段的位置。
  • NULL标志位:1或2个字节存放是否有NULL值。
  • 记录头信息:固定5个字节,最后两个字节存放下一个行数据的偏移地址。

3.2 Dynamic格式

     与Compact行格式很像,差异在于页面溢出的处理上;

     Dynamic行记录格式存放在BLOB中的数据采用完全行溢出的方式,在数据页只存放29个字节的指针,实际的数据都会存放在Off Page中。如下图所示:

                                                                           图3-2 Barracuda文件格式的溢出行

4 InnoDB数据页结构

                                                                图4-1   InnoDB存储引擎数据页结构

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL之 表 的相关文章

随机推荐

  • U-Boot初始化及工作流程分析

    0 概述 U Boot通常是从架构相关的汇编文件 尾缀为大写S的汇编文件意为可链接 中获取第一条执行的指令 例如 arch arm cpu armv7 start S arch powerpc cpu mpc83xx start S arc
  • 如何实现弹窗一天只弹一次的需求

    你是否有这种需求 页面需要对用户有一个信息提示的弹窗 但是为了骚扰次数过多导致用户的反感于是产品要求一天只弹一次 服务器显需求太小懒得搭理 于是 重任 就落在你的头上 跟我来 一招搞定一天一次的弹窗 解决思路是 进页面的时候判断如果本地没保
  • Matlab常用字符串操作教程

    Matlab是一种功能强大的编程语言 它提供了丰富的字符串操作函数 在本教程中 我们将介绍一些常用的Matlab字符串操作函数和用法 字符串的创建和访问 使用单引号或双引号创建字符串 str Hello World 或 str Hello
  • 入职阿里工作5年,晋升到P8就剩这份学习笔记了,已帮助多个朋友拿到Offer

    关于程序员 除了做项目来提高自身的技术之外 还有一种提升自己的专业技能就是 多 看 书 入职阿里到现在已经5年了 工作压力大 节奏快 从刚开始的P6到现在的P8 技术上确实得到了成长 尤其是当你维护与大促相关的系统的时候 熬到P8也费了不少
  • vue3使用element组件中的Image导致频闪

    只需要把el image标签换成原生img标签就可以了
  • arma3服务器滚动信息,【图片】武装突袭3服∷务器状态信息查询 - 接口/模块/JАVa-机器人_武装突袭3吧_百度贴吧...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 然后是java如何使用接口 以下文档仅供参考 已字符防和谐处理 GetXMLtoServerPlayer GSP new GetXMLtoServerPlayer 得到玩家信息 String S
  • python format 冒号_python之格式化输出

    字符串格式化有两种方式 和format 先介绍下 号的方法 s的语法结构 叫做占位符 就是先占一个位置 然后我们用真实的要显示的数据替换占位符即可 最简单的用法就是下面的方式 其实 s还有其他的功能 s 我的名字是 s 我的年龄是 d al
  • xss-labs通关参考(7-10)

    7 第七关 先提交 Oonn gt 查看源代码 过滤了script 和On 双引号闭合 所以payload oONnmouseover alert xss 8 第八关 先提交 Oonn gt 查看源代码 发现 script和on中间都被加上
  • [leetcode] 437. Path Sum III 解题报告

    题目链接 https leetcode com problems path sum iii You are given a binary tree in which each node contains an integer value F
  • 传输线理论--学习笔记

    1 1传输线方程及其通解 下图为双导线的集总电路模型 在一个微分段内 双导线可以等效集总电路模型 的模型怎么来的 gt 双导线的射频效应 导体损耗 趋肤效应 单位长度串联电阻R0 介质损耗 两根导线之间有介质 如空气 单位长度并联电导G0
  • 第一届排序算法性能大赛(上万字激烈解说)

    写在前面 最近学到了一些重要的排序 并且简单地测了一下各种排序算法在不同的算法实现 优化以及递归和非递归下的运行速度 本文一共提及了以下几种常用到的排序 其他排序使用场景较少 便没有提及 并且本文的全部代码实现均为通俗易懂的c语言 如果觉得
  • Flink Table API & SQL - 概念和通用API

    Table API 和 SQL 集成在一个 API 中 这个 API 用作查询 输入和输出的表 本文档展示了带有 Table API 和 SQL 查询的程序的公共结构 如何注册表 如何查询表以及如何写入表 目录 两个Planner之间的主要
  • shell运行class文件 导入class依赖的jar包

    shell脚本运行class文件导入class依赖的jar包 如下图 我要用shell运行TestFinish类 类中引入了rt jar包 在shell中怎么引入rt jar包呢 很简单只要三步就可以运行了 1 javac cp rt ja
  • win10无法登陆到你的账户解决方法

    进入win10系统登录的时候很多用户遇到了win10无法登陆到你的账户情况 这种问题都会需要来进行重新设置 来看看怎么解决这个无法登录问题吧 更多重装系统教程尽在小白系统重装官网 1 首先我们需要进入win10系统安全模式 安全模式进入方法
  • 【IIOT】欧姆龙PLC数采之NX/NJ系列

    IIOT 欧姆龙PLC数采之NX NJ系列 前言 一 车间级数采系统架构 二 欧姆龙PLC介绍 三 NX NJ系列产品说明 3 1 CPU规格 3 2 内部寄存器 3 3 支持协议 四 数采方案 4 1 选择协议 4 2 硬件架构 1 确认
  • 防页面url缓存

    在开发中 发现当我们访问一个地址之后 包括ajax访问 打开检测会发现第二次请求没有去服务器端 直接走的浏览器自身的缓存 如何避免这样的情况呢 通过在地址栏后拼一串随机数 即可 例如 XXXX t 生成的随机数 随机数可以跟时间戳 或者随机
  • Vue+el-table+sortable踩坑

    1 拖拽后 同页面切换tab 表格数据更新 表头显示顺序有误 拖拽 1 2 3 2 1 3 更新后为 5 4 6 应为 4 5 6 原代码
  • Kendo UI开发教程(26): 单页面应用(四) Layout

    Layout继承自View 可以用来包含其它的View或是Layout 下面例子使用Layout来显示一个View 1
  • matplotlib绘制直方图

    统计250部电影的时长分布状态 from matplotlib import pyplot as plt from matplotlib import font manager time 131 98 125 131 124 139 131
  • MySQL之 表

    表是关于特定实体的数据集合 这也是关系型数据库模型的核心 1索引组织表 在InnoDB存储引擎中 每张表都有一个主键 Primary Key 如果创建表时没有显示定义主键 则会按照如下方式创建主键 存在非空的唯一索引 Unique NOT