MySQL系列-物理存储结构和索引算法
系列文章说明
MySQL系列文章包含了软件安装、具体使用、备份恢复等内容,主要用于记录个人的学习笔记,主要使用的MySQL版本为5.7.28,服务器系统版本为CentOS 7.5。本章节内容物理存储结构和索引算法。
物理存储结构
物理存储结构 扇区
机械硬盘结构如下:
每个磁道上一个弧段被称之为一个扇区(图见绿色部分)。扇区是磁盘的最小组成单元,通常是512字节。(由于不断提高磁盘的大小,部分厂商设定每个扇区的大小是4096字节)
物理存储结构 block
block是操作系统最小的存储单元,在进行文件系统制作时,可以指定block大小,默认block大小为4KB,即一个block由8个连续的扇区组成。
linux系统查看文件系统的block大小
stat -f /
物理存储结构page页
页是InnoDB存储引擎磁盘管理的最小单位,每个页默认16KB。即默认情况下,一个页由4个block组成。
查看mysql页大小:
select @@innodb_page_size;
物理存储结构 extent区
在 InnoDB 存储引擎中,一个区会分配 64 个连续的页。因为 InnoDB 中的页大小默认是 16KB,所以一个区的大小是 64*16KB=1MB。在任何情况下每个区大小都为1MB,为了保证页的连续性,InnoDB存储引擎每次从磁盘一次申请4-5个区。默认情况下,InnoDB存储引擎的页大小为16KB,即一个区中有64个连续的页。
物理存储结构 segment段
段(Segment)由一个或多个区组成,区在文件系统是一个连续分配的空间(在 InnoDB 中是连续的 64 个页),不过在段中不要求区与区之间是相邻的。段是数据库中的分配单位,不同类型的数据库对象以不同的段形式存在。当我们创建数据表、索引的时候,就会相应创建对应的段,比如创建一张表时会创建一个表段,创建一个索引时会创建一个索引段。
物理存储结构 table space表空间
表空间(Tablespace)是一个逻辑容器,表空间存储的对象是段,在一个表空间中可以有一个或多个段,但是一个段只能属于一个表空间。
物理存储结构 总结
段:一个表就是一个段,可以由1个或者多个区构成
区:一个区(簇),默认1M,连续的64个pages构成
页:一个页,默认16KB,连续的4个OS block
索引
何为索引?索引就类似于书的目录,方便我们快速查找内容,索引的目的在于提高查询或检索效率。
算法 二分查找法(binary search)
二分查找法也称为折半查找法,其基本思想是:将记录按有序化排列,在查找过程中采用跳跃式方式查找。
比如需要在以下数据中查找53:
算法 二叉树和平衡二叉树
在二叉查找树中,左子树的键值总是小于根的键值,右子树的键值总是大于根的键值。
平衡二叉树和二叉树原理是一致的,但是由于二叉树的一些局限性(不自动平衡树),演变出了平衡二叉树。
二叉树插入数据:
平衡二叉树的左旋:
逆时针旋转红黑树的两个节点,使得父节点被自己的右孩子取代,而自己成为自己的左孩子。
平衡二叉树的右旋:
顺时针旋转红黑树的两个节点,使得父节点被自己的左孩子取代,而自己成为自己的右孩子。
算法B+ tree
B+Tree算法主键索引:
tree:叶节点之间存放了相邻节点的数据起始范围
索引查找:
end