MySQL的页与行格式

这篇具有很好参考价值的文章主要介绍了MySQL的页与行格式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是MySQL的页?

页是指存储引擎使用的最小的数据存储单位。
当 MySQL 执行读取或写入操作时,是以页为基本单位来进行操作的。即使读写一条数据,MySQL 也会按页操作。
MySQL 的存储引擎会将数据分成多个页,并根据需要将这些页加载到内存中进行处理。
通过使用页来组织数据,MySQL 能够更高效地管理存储空间,减少读取数据时的硬盘 I/O 次数,从而提高数据库的性能。

MySQL 页的组成?

  • 页头:页头包含了关于该页的一些元数据信息,例如页类型、页号、页大小等。页头还可能包含用于管理该页的一些控制信息。
  • 记录:记录是页中存储的实际数据内容,记录可以包含行数据、索引信息等。记录的组织方式和格式会根据具体的数据表结构和存储引擎的实现而有所不同。
  • 空闲空间:空闲空间是指页面中尚未被使用的空间,用于存放新的行数据或者在更新操作中的数据版本管理。数据库系统会动态地管理和维护空闲空间,以便高效地利用页面的存储空间。
  • 页校验和:有些数据库系统会在页中存储校验和信息,用于检测页的完整性和数据一致性。校验和可以帮助系统检测存储介质上的数据损坏或者传输过程中的错误。
  • 其他元数据:除了以上列出的内容之外,页还可能包含其他元数据信息,例如版本号、事务相关信息、锁信息等,这些信息有助于数据库系统实现事务管理、并发控制等功能。

MySQL数据为什么要存储在页上?

方便管理,提高数据的访问效率。
方便管理:通俗的理解,MySQL的页就好比一个个抽屉,数据就是放抽屉里的中药,方便对每一小块的资源进行处理。
提高数据的访问效率:MySQL可以存储大量数据,如果不存储在页上进行拆分,一次性存储在磁盘上,一次性加载几个G到内存,不是一个好的情况。

并为索引做准备,如果用B+tree作索引,想把大量的数据放入1-3层非线性的b+tree树中,若没有页来压缩归类,很难放得下。

MySQL的数据在磁盘上是紧凑的连续存储的吗?

不是。
紧凑的连续存储,舒服了强迫症工程师,但不适应磁盘。
如果是紧凑的连续存储,对表数据的头部或中间进行数据的插入、删除操作,那么后面的数据就需要移动来保证数据存储的连续性,这个过程消耗资源且无意义。
所以只需要保证逻辑上的关联就行,加个链表就能解决数据之间的关联问题。

页和索引有什么关系?

没有因果关系,但有合作关系。
没有因果体现在:页是用来存储数据,索引是用来提高查询速度的。
合作关系,体现在:MySQL加载数据是按页加载的,不是按照id一条一条加载。索引的创建,b+tree的各种节点,也是按照页来的。

默认页大小?

16KB。

MySQL 行、页、区、段、表空间什么联系?

  • 行就是一条一条的数据,并按照行格式,包含一些字段记录头的信息。
  • 多个行组合成一个页,页是指存储引擎使用的最小的数据存储单位。
  • 64个连续页组成一个区,默认一个区16KB大小,64个区刚好1MB。
  • 多个区组成一个段,段是数据库的分配单位。
  • 多个段组成一个表空间,表空间是逻辑上的存在,表空间又分为系统表空间,用户表空间,撤销表空间和临时表空间。

MySQL 行、页、区、段、表空间存在的意义是什么,解决了什么问题?

  • 行:就是一条条的数据,专门把数据放表服务于业务,没什么好说的。
  • 页:是指存储引擎使用的最小的数据存储单位,当 MySQL 执行读取或写入操作时,是以页为基本单位来进行操作的,若引擎对数据读写逐行处理,太细的粒度的读写会增加硬盘 I/O 次数,降低性能。
  • 区:区的引入有助于提高数据的连续性和存取效率。
  • 段:帮助数据库系统更好地优化存储空间的使用和数据访问的效率。
  • 表空间:通过表空间的划分和管理,可以实现对数据存储结构的灵活控制和优化。

MySQL 页的分类?

  • 数据页(Data Pages):用于存储表中的实际数据。每个数据页的默认大小是16KB,可以通过配置进行修改,其中包含着表的行记录。
  • 索引页(Index Pages):用于存储表的索引数据结构,如 B+ 树索引。每个索引页的默认大小也是16KB,可以通过配置进行修改。索引页中包含了索引节点和指向下一层节点或数据页的指针。
  • BLOB页(Blob Pages):用于存储大型二进制对象(BLOB)数据,如图片、音频或视频文件等。BLOB 数据通常被分离存储在独立的页中,而不是与其他数据存储在同一个数据页中。
  • Undo页(Undo Pages):用于存储事务的回滚信息,以支持事务的回滚和并发控制。Undo 页记录了旧值和未提交事务的回滚信息。
  • 插入缓冲(Insert Buffer):虽然不是一种真正的页类型,但在 InnoDB 存储引擎中使用了插入缓冲来加速数据的插入操作。插入缓冲缓存了新插入的数据,然后按顺序批量地将数据插入到数据页中
  • 系统页(System Pages):用于存储 InnoDB 存储引擎的一些系统信息,例如表空间、事务信息等。
  • 刷新(Flush)页:用于将修改过的数据页刷新到磁盘上的物理数据文件中。
  • 压缩页(Compressed Pages):用于存储使用压缩算法进行压缩的数据。
  • 重做日志页(Redo Log Pages):用于存储 InnoDB 存储引擎的重做日志(Redo Log)信息。
  • 页面链表页(Page Directory Pages):用于存储页的目录信息,帮助管理和组织其他类型的页。
  • Page Cleaner 页(Page Cleaner Pages):用于执行后台任务,例如在 InnoDB 存储引擎中,Page Cleaner 负责回收已经使用过的数据页,以减少闲置页的数量。
  • Free Space Info 页(Free Space Info Pages):用于跟踪数据页的空闲空间信息,帮助优化数据页的利用率。
  • Change Buffer 页(Change Buffer Pages):用于延迟索引更新操作,在某些情况下通过 Change Buffer 缓存索引更新操作,以提高性能。

delete是真的把数据从磁盘中移除了吗?

并没有从磁盘中移除,只是标记为删除,更改了行中的元数据部分有一个叫做delete_mark的删除标记。
原因:
修改一个标志位的开销,比磁盘删除一条记录更快,当有大量数据需要删除时,如果移除磁盘数据,可能会导致所在的页为空页,删除大量的空页,仍旧是一个消耗资源的过程。。
倒不如直接软删除,当需要插入新数据时,存储引擎可以直接使用已经存在的空闲页,而不需要为新数据重新分配磁盘空间。

注意,truncate,会释放磁盘空间。

MySQL行格式有哪些?

  • DEFAULT:这是 InnoDB 存储引擎的默认行格式。在这种格式下,数据是以紧凑的格式存储的,适合一般的 OLTP 应用。
  • COMPRESSED:这是 InnoDB 存储引擎特有的一种行格式,在 MySQL 5.7 版本后提供。使用压缩的方式存储数据,可以减少存储空间的使用和提高性能。
    DYNAMIC:InnoDB 存储引擎也支持这种行格式,适用于包含大量可变长度列的表。数据存储比较灵活,既有利于节省空间,又能提高性能。
  • COMPACT:适用于 MyISAM 存储引擎的一种行格式,使用紧凑的格式存储数据。
  • FIXED:适用于 MyISAM 存储引擎的另一种行格式,所有列都用固定长度存储数据。
  • REDUNDANT:适用于 MyISAM 存储引擎的一种行格式,存储冗余信息以加快查询速度。

什么是行溢出?

行数据量超出所能容纳的最大值。
举例说明两种情况:
一个是设计表时:例如把varchar的长度设置为70000,则会报错column length too big for column 's' (max = 16383); use Blob or TEXT instea.
一个是插入或更新数据时:数据内容超过表字段约定的最大长度引发的报错(严格模式)或完整截断(非严格模式)情况。

为什么varchar行溢出显示的是max=16383,而不是65535?

因为默认的使用utf8mb4的编码(最长占4个字节)),虽然utf8编码的字符是变长,但是需要保证每个字符占最大(4个字节)字节的情况下,能够存储进去。
16383*4 = 65532,其中用2个字节用于保存字段长度(2个字节占16位,216=65536),剩余2字节无法被4整除,余下的。

页与缓冲池的关系?

真正访问页之前,需要把磁盘上的页缓存到内存中的buffer pool中,所有的变更,也是先更新缓冲池,此时并没有持久化到磁盘,称之为脏页,然后脏页通过checkpoint机制去刷盘。

为什么不采用实时刷盘策略?

磁盘比内存慢,大规模的并发读写,实时刷盘,可能导致用户改了1个字节的数据,当前页就要实时刷盘到磁盘中,极大的降低效率,如果一条SQL影响范围很大,涉及多个页,多个页不连续,又会产生随机io,所以不可实时刷盘。文章来源地址https://www.toymoban.com/news/detail-837793.html

到了这里,关于MySQL的页与行格式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Boot 整合 分布式搜索引擎 Elastic Search 实现 搜索、分页与结果过滤

    本文参考黑马 分布式Elastic search Elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 实现黑马旅游的酒店搜索功能,完成搜索和分页 在项目首页,有一个很大的搜索框、也有分页按钮 点击搜索按钮,可以

    2024年02月06日
    浏览(50)
  • 【MySQL入门】-- 认识MySQL存储引擎

    目录 1.MySQL存储引擎有什么用? 2.MySQL的存储引擎有哪些?分别有什么特点? 3.存储引擎的优缺点 4.关于存储引擎的操作 5. 存储引擎的选择? 6.InnoDB和MyISAM区别? 7.官方文档 1.MySQL存储引擎有什么用? MySQL之所以使用存储引擎,是因为存储引擎提供了不同的数据管理和存储方式

    2024年02月09日
    浏览(43)
  • 【MySQL系列】- 常用MySQL存储引擎

    数据库存储引擎是数据库底层软件组织,数据库管理系统使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引机制、锁定水平等功能。不同的存储引擎,都有其特定的功能及特定应用场景。 MySQL常用存储引擎有一下几类: 1、InnoDB存储

    2024年02月09日
    浏览(45)
  • Mysql表锁与行锁

    锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是 一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一

    2024年02月16日
    浏览(42)
  • MySQL高级-存储引擎+存储过程+索引(详解01)

    目录 1.mysql体系结构  2.存储引擎 2.1.存储引擎概述 2.2.1.InnoDB 2.2.2.MyISAM 2.2.3.存储引擎选择 3.存储过程 3.1.存储过程和函数概述  3.2.创建存储过程 3.3.调用存储过程 3.4.查看存储过程 3.5.删除存储过程 3.6.语法 3.6.1.变量 3.6.2.if条件判断 3.6.3.传递参数 3.6.4.case结构 3.6.5.while循环 3.

    2024年02月13日
    浏览(44)
  • MySQL-存储引擎

    1、 指定存储引擎 2、 查看数据库支持的存储引擎 show   engines; 3、InnoDB引擎         1、高性能,可靠安全性的存储引擎         2、 有三个特性,                 事务,                 行级锁,                 外键,                 文件格

    2024年01月19日
    浏览(41)
  • MySQL----事物与存储引擎

    事务是一种机制、一个操作序列,包含了一组数据库操作命令(增删改),并且把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行。 事务是一个不可分割的工作逻辑单元, 在数据库系统上执行并发操作时,事务是最

    2024年02月10日
    浏览(50)
  • MySQL 事务与存储引擎

    目录 一、MySQL事务的概念 二、事务的ACID特点 2.1 原子性 2.2 一致性 2.3 隔离性  2.4 持久性 2.5 事务之间的相互影响  三、Mysql及事物隔离级别 3.1 查询全局事务隔离级别  3.2 查询会话事务隔离级别   3.3 设置全局事务隔离级别   3.4 设置会话事务隔离级别   四、事务控制语

    2024年02月16日
    浏览(41)
  • mysql索引、事务、存储引擎

    索引的概念: 索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址(类似于C语言的链表通过指针指向数据记录的内存地址)。 使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找到该行数据对应的物理地址然后访问

    2024年02月10日
    浏览(36)
  • MySQL—存储引擎(上)

    ♥️ 作者:小刘在C站 ♥️ 个人主页: 小刘主页 ♥️ 每天分享云计算网络运维课堂笔记,努力不一定有回报,但一定会有收获加油!一起努力,共赴美好人生! ♥️ 树高千尺,落叶归根人生不易,人间真情 目录 1). 连接层 2). 服务层 3). 引擎层 4). 存储层 存储引擎介绍 1

    2024年02月07日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包