IT评测·应用市场-qidao123.com

标题: MySQL的页与行格式 [打印本页]

作者: 慢吞云雾缓吐愁    时间: 2024-5-13 09:29
标题: 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 行、页、区、段、表空间什么联系?

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

MySQL 页的分类?

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

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

什么是行溢出?

行数据量超出所能容纳的最大值。
举例阐明两种情况:
一个是设计表时:例如把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,所以不可实时刷盘。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4