其中库的物理结构用文件系统的目录存储,比如我们的测试机中的/data/mysql下的mysql目录即是mysql里面的mysql库。 表也是存储在磁盘上,存储时区分于不同的存储引擎。(就像往Linux操作系统存的时候,也需要关注ext2,ext3,ext4,xfs不同的 文件系统类型。)mysql对于不同的存储引擎,表的存储方式是不一样的。
查看库名为mysql,表名为user的物理结构
[root@xiaoyong mysql]# ll /data/mysql/mysql -rw-r----- 1 mysql mysql 10816 Oct 8 14:49 user.frm 列的相关信息(字段) -rw-r----- 1 mysql mysql 396 Oct 8 15:27 user.MYD 数据行(记录) -rw-r----- 1 mysql mysql 4096 Oct 8 15:27 user.MYI 索引信息 上面就是MyISAM存储引擎类型的表
InnoDB(mysql默认的存储引擎)的表
-rw-r----- 1 mysql mysql 8636 Apr 18 11:37 time_zone.frm -rw-r----- 1 mysql mysql 98304 Apr 18 11:37 time_zone.ibd time_zone.frm:存储列相关信息 time_zone.ibd:数据行(记录 )+索引
两个概念
linux文件系统物理结构概念 :同一磁道的扇区,同一柱面的扇区,即是连续的扇区(512字节 ),将连续的扇区分配给磁盘空间
可以提升IO速度,将连续的扇区格式化,分配成4kb的数据块block,1个数据块就是8个连续的扇区。数据块block也作为连续的,
比如把1G的硬盘格式化就是做成很多连续的4kb的block。其最终1G的硬盘会再分配innodb的节点,innodb就相当于目录,
辅助更好的读取block。
mysql物理结构概念:InnoDB引擎把idb文件做类似于格式化的动作,一个idb文件是一个表空间,即是一个表段,段的大小和磁盘
空间有关。mysql把段格式化为一个个的页,一个页16kb,是mysql中最小分配物理IO单元,一次性读或者取都是16kb.连续
的16kb的页称为区,是mysql分配单元。
一个表段由多个区组成,一个区通过1个或者多个连续的page页组成的。
段:1个表就是一个段(分区表除外)
区:连续的64个page,1M.
页:16KB,连续的4个block.
分区表
id name age 1 a 11 ... 10.. z.. 99.. 数据行太多,索引高度太高,以一个列作为分区的条件,拆分中多张表,从物理角度看,一张表有多个段构成。