前言:众所周知,数据库就是一个将各类数据,以表格的形式存储的,但是看似如此简单的功能它是真的简单吗?我们和直接使用简单的Excel建立的表格有区别吗?如果有在哪里? PS:本文以常用的MySQL为例
在不考虑缓存等机制(数据IO)的前提下,首先我们知道,对于用户来说他使用数据时,会和其内部的存储设备,一般为磁盘(当然也有固态之类的更高效的存储设备,但是数据库一般是部署在服务端,而服务端的主机或集群,考虑安全、可靠和成本等问题一般是使用磁盘),交互寻找和提取对应的数据.
找了一篇写的不错的磁盘IO文章:一提到mysql,总有人说磁盘IO,到底什么是磁盘IO?-CSDN博客
在浅浅的了解了数据IO后我们大概有如下认知:
现在我们知道了数据库是数据文件的,但是又有一个新问题,那他是如何管理这些不同的page的呢?
小结
下图为常见的存储引擎底层所使用的储存的数据结构
MyISAM 存储引擎-主键索引 MyISAM 引擎同样使用B+树作为索引结果,叶节点的data域存放的是数据记录的地址。下图为 MyISAM表的主索引, Col1 为主键。
其中, MyISAM 最大的特点是,将索引Page和数据Page分离,也就是叶子节点没有数据,只有对应数据的地址。 相较于 InnoDB 索引, InnoDB 是将索引和数据放在一起的。
其中, InnoDB 这种用户数据与索引数据在一起索引方案,叫做聚簇索引 当然, MySQL 除了默认会建立主键索引外,我们用户也有可能建立按照其他列信息建立的索引,一般这种索引可以叫做辅助(普通)索引。 对于 MyISAM ,建立辅助(普通)索引和主键索引没有差别,无非就是主键不能重复,而非主键可重复。 下图就是基于 MyISAM 的 Col2 建立的索引,和主键索引没有差别 .
立辅助(普通)索引和主键索引没有差别,无非就是主键不能重复,而非主键可重复。 下图就是基于 MyISAM 的 Col2 建立的索引,和主键索引没有差别 .