画图
操作系统是一页一页从磁盘读数据的,操作系统1页=4KB,操作系统从磁盘里面取数据,最少可以取出4KB。
InnoDb的一页是等于16KB,这个值是可以改的,但是,尽量改为4的倍数。
对于这八条数据,都是存在我们的磁盘里的,假如现在有一条sql语句select * from t1 where a = 7;
一种思路,我们从磁盘里一个一个取出数据(每取一次涉及一次磁盘IO),取出来之后跟a=7比较,那么就需要7次磁盘IO,而磁盘IO相对于内存中运算是很耗时的,如果按照这种思路,肯定会慢死。
换个思路,刚才我们说到,InnoDB是按照页取数据的,每页是16KB。
而对于,我们这个表,有四个int类型,一个varchar类型,每个int类型4b,那它们总和近似也就20b。
InnoDB从磁盘取数据都是以页作为基本单位的,所以,它就可以一下子取出16000/20 = 800行数据,也就是说进行一次磁盘IO,就可以将这些数据加载到内存了,然后,在内存中再依次进行比较,找出我们想要的数据。
要知道内存中的计算速度,相对于磁盘IO操作,要快很多很多。
InnoDB会在插入的时候,对你的数据按照主键进行排序,
四、Mysql是如何选择最优索引的一个InnoDB页,到底是如何持久化到磁盘里的?
一个InnoDB页,默认大小是16kb,而操作系统的一页默认是4Kb。现在要持久化InnoDB里的一页数据,操作系统可能就需要4次才能完成。
这样的话,很有可能这四次,就成功了两次,失败了两次,那么mysql是怎么解决这个问题的呢?
4.1 mysql的页结构 4.2 插入一条数据的过程 4.2.1 插入时按索引排序当我们想往mysql插入数据的时候,它是怎么插入的呢?
4.2.2 页目录
P4
好文1,好文2,好文3,磁盘IO、参考、知乎、视频教程