顺序读和InnoDB的数据组织

简介: 【7月更文挑战第7天】自增主键优化顺序读:保证数据物理排序,提升范围查询效率。InnoDB引擎中,主键决定数据在页的存储。当插入的数据引起页分裂,如从1、2、3、5、6、7插入4,会导致相邻逻辑页在磁盘上可能分散,影响性能。了解页结构深化数据库知识,面试时可根据情况深入讨论。

此外,我们还可以从一个比较新奇的角度,解释为什么要使用自增主键,关键词就是顺序读

自增主键还有一个好处,就是数据会有更大的概率按照主键的大小排序,两条主键相近的记录,在磁盘上的位置也是相近的。那么可以预计,在范围查询的时候,我们能够更加充分地利用到磁盘地顺序读特性

如果希望在面试官面前树立在数据库方面积累比较多的形象,就要进一步解释数据库的页分裂究竟是怎么回事,这时候可以用MySQL InnoDB引擎来举例子。

MySQL的InnoDB引擎,每一页上按照主键的大小放着数据。假如说我现在有一个页放着主键1、2、3、5、6、7这六行数据,并且这一页已经放慢了。现在我要插入一个ID为4的行,那么InnoDB引擎就会发现,这一页已经放不下4这行数据了,于是逼不得已,就要把原本的页分成两页,比如1、2、3放到一页,5、6、7放到另外一页,然后把4放到第一页。
这种页分裂会造成一个问题,就是虽然从逻辑上来说 1、2、3 这一页和 5、6、7 这一页是邻近的两个页,但是在真实存储的磁盘上,它们可能离得很远。

到这一步,你的回答就已经算是可以了。面试官如果想要进一步探讨,那么可能会继续追问 InnoDB 引擎上的页这种数据结构有什么字段,各自有什么用处。如果你现在是临时抱佛脚准备面试,那么就没必要去背这些八股文。但是如果你只是平常在学习技术知识,想要夯实基础,那么我建议你深入去看看这部分内容。

目录
相关文章
|
5月前
|
存储 算法 关系型数据库
InnoDb行格式、数据页结构、索引底层原理和如何建立索引
InnoDb行格式、数据页结构、索引底层原理和如何建立索引
99 0
|
4月前
|
存储 算法 关系型数据库
【MySQL技术内幕】4.4-InnoDB数据页结构
【MySQL技术内幕】4.4-InnoDB数据页结构
85 1
|
5月前
|
存储 关系型数据库 MySQL
InnoDB一棵B+树可以存放多少行数据?
InnoDB一棵B+树可以存放多少行数据?
65 0
InnoDB一棵B+树可以存放多少行数据?
|
11月前
|
存储 算法 关系型数据库
第21章_InnoDB数据页结构
第21章_InnoDB数据页结构
57 0
|
12月前
|
存储 关系型数据库 MySQL
MySQL使用InnoDB引擎时一张表最大可以储存数据大小为 64TB,那为什么当表中的单行数据达到16KB时,这张表只能储存一条数据?
MySQL使用InnoDB引擎时一张表最大可以储存数据大小为 64TB,那为什么当表中的单行数据达到16KB时,这张表只能储存一条数据?
128 0
|
存储 关系型数据库 MySQL
第5章 【MySQL】InnoDB数据页结构
第5章 【MySQL】InnoDB数据页结构
69 0
|
存储 算法 关系型数据库
一文带你了解MySQL之InnoDB 数据页结构
学完了记录结构,我们该学数据页的结构,前边我们简单的提了一下页的概念,它是Innodb管理存储空间的基本单位,页的大小默认16KB,InnoDB为了不同的目的而设计了许多种不同类型的页,比如存放表空间头部信息的页,存放Insert Buffer信息的页,存放INODE信息的页,存放undo日志信息的页等等等等。而我们聚焦的是那些存放我们表中记录的那种类型的页,官方称这种存放记录的页为索引(INDEX)页,鉴于我们还没有了解过索引是个什么东系,而这些表中的记录就是我们日常口中所称的数据,所以目前还是叫这种存放记录的页为数据页吧
590 0
|
存储 机器学习/深度学习 算法
一文带你了解MySQL之InnoDB统计数据是如何收集的
我们前边唠叨查询成本的时候经常用到一些统计数据,比如通过show table status可以看到关于表的统计数据,通过show index可以看到关于索引的统计数据,那么这些统计数据是怎么来的呢?它们是以什么方式收集的呢?本章将聚焦于InnoDB存储引擎的统计数据收集策略,看完本章后家就会明白为啥前边老说InnoDB的统计信息是不精确的估计值了
520 0
|
存储 关系型数据库 MySQL
MySQL:如何快速的查看Innodb数据文件(1)
MySQL:如何快速的查看Innodb数据文件
246 0
MySQL:如何快速的查看Innodb数据文件(1)
|
存储 SQL 关系型数据库
InnoDB数据页什么时候合并(1)
InnoDB数据页什么时候合并
107 0