1.表空间
在InnoDB存储引擎表中,每张表都有个主键(Primary Key),如果在创建表时没有显式地定义主键,则InnoDB存储引擎会按如下方式选择或创建主键:
❑首先判断表中是否有非空的唯一索引(Unique NOT NULL),如果有,则该列即为主键。
❑如果不符合上述条件,InnoDB存储引擎自动创建一个6字节大小的指针。
表的空间结构:
表空间又由段(segment)、区(extent)、页(page)组成。
段
InnoDB存储引擎表是索引组织的(index organized),因此数据即索引,索引即数据。那么数据段即为B+树的叶子节点(图4-1的Leaf node segment),索引段即为B+树的非索引节点(图4-1的Non-leaf node segment)。
区
区是由连续页组成的空间,在任何情况下每个区的大小都为1MB。为了保证区中页的连续性,InnoDB存储引擎一次从磁盘申请4~5个区。在默认情况下,InnoDB存储引擎页的大小为16KB,即一个区中一共有64个连续的页。
页
同大多数数据库一样,InnoDB有页(Page)的概念(也可以称为块),页是InnoDB磁盘管理的最小单位。在InnoDB存储引擎中,默认每个页的大小为16KB。而从InnoDB 1.2.x版本开始,可以通过参数innodb_page_size将页的大小设置为4K、8K、16K。
在InnoDB存储引擎中,常见的页类型有:
❑数据页(B-tree Node)
❑undo页(undo Log Page)
❑系统页(System Page)
❑事务数据页(Transaction system Page)
❑插入缓冲位图页(Insert Buffer Bitmap)
❑插入缓冲空闲列表页(Insert Buffer Free List)
❑未压缩的二进制大对象页(Uncompressed BLOB Page)
❑压缩的二进制大对象页(compressed BLOB Page)
行
每个页存放的行记录也是有硬性定义的,最多允许存放16KB/2-200行的记录, 即7992行记录。
2.行的那些事
行溢出数据:简单来说,varchar支持最大 65535,然后超过这个数,就会建表自动转为text, 前768字节的前缀(prefix)数据,其余的会存储在 行溢出页。