公司网站开发背景,海南行指三亚网站开发,全国工商企业信息查询官网,北京网站设计公司飞沐一)为什么要有区#xff0c;段#xff0c;页#xff1f; 1)页是内存和磁盘之间交互的基本单位内存中的值修改之后刷到磁盘的时候还是以页为单位的索引结构给程序员提供了高效的索引实现方式#xff0c;不过索引信息以及数据记录都是记录在文件上面的#xff0c;确切来说是… 一)为什么要有区段页 1)页是内存和磁盘之间交互的基本单位内存中的值修改之后刷到磁盘的时候还是以页为单位的索引结构给程序员提供了高效的索引实现方式不过索引信息以及数据记录都是记录在文件上面的确切来说是存储在页结构中另一方面索引是在存储引擎中实现的MYSQL服务器上面的存储引擎负责对于表中的数据进行读取和写入操作不同的存储引擎中存放的格式是不同的有的存储引擎例如Memory甚至都不用磁盘存储数据 2)InnoDB见数据划分成若干个页页的大小默认是16KBMYSQL以页作为磁盘和内存交互的基本单位也就是说MYSQL一次至少将16KB的数据从磁盘加载到内存里面一次也是至少把内存中的16KB数据刷新到磁盘上也就是说从数据库中无论是读一行还是读取多行都是将这些行所在的页进行加载也就是说数据库进行存储空间的基本单位是页数据库IO操作的最小单位是页一个页中可以有多条行记录 3)页和页之间并不会在物理结构上直接相连而是通过链表进行相连 1)什么要有区 1.1)select * from user where userID1 and userID5这些满足要求的数据可能分布在不同的页中我们就需要找到所有数据所在的页想要将页加载到内存中实际上页和页之间在物理磁盘中离的是非常远的MYSQL需要依次找到三个页的物理磁盘位置并把它们加载到磁盘中因为磁盘中的磁头在去查找页的时候需要做寻道盘片的旋转都需要时间这种状况就称之为随机IO随机IO中磁盘的读写速度和内存的操作速度相差了好几个数量级在磁盘中查找页如果页分散在磁盘上面的不同区域找页就非常麻烦 1.2)顺序IO:所以说尽量让链表中相邻的页的物理位置也相邻所以进行磁盘范围查询的时候方便,使用顺序IO尽量让三个页在物理磁盘上是挨着的是连续存放的这样进行寻找的时候就能减少盘片旋转和磁道扫描的过程这样加载速度就会快很多分一个区就是为了保证一波页是在物理磁盘时尽量连续的这样子就减少了随机IO 1.3)但是区和区不一定是连续的所以很有可能我们查询的数据都在一个区里面多个页在一个区内比之前多个页随机分布在磁盘上面的各个位置要靠谱得多 2)为什么要有段 1)在区里面存放页区里面的页是连续存储现在还是进行查询 select * from user where userID1 and userID5现在已经定位到userID大于等于1小于等于5这个范围了现在感兴趣的只是B树的叶子节点中所在的页 2)但是非叶子节点也是页但是现在的区中极有可能存放叶子节点中的页也有可能存放非叶子节点中的这些目录页区中既有目录页也有数据页但是感兴趣的只有数据页因为都放可能就会导致数据页放的少了此时加载数据的时候发现加载一个页数据项不够又要跳转到下一个区这个时候就不纯粹了所以说能不能做到这样特定的区只能存放叶子结点的那些页有一些区专门存放非叶子节点的那些页这样在进行定位数据的时候直接定位到叶子节点所在的区即可 3)一个段里面可能有多个区非叶子节点多分配几个区这些区都在一个段里面