mysql 以行为单位来存储一个表的数据。除了blob等特殊情况,一行的所有字段,就是依照表定义中列的顺序,依次存放为一行的。行的头部还有一些元数据信息,以及一个null位图。元数据信息在innodb中包含 事务id, roll-ptr, row-id(如果表没有主键的话)等。 null 位图就是指出该行哪些字段是NULL值。NULL字段就不需要在行中再占用任何空间了。 对于blob等超大字段,会在行中存放一个指针(页号,偏移),指向存放blob的页的链表,并且这些页也位于innodb数据文件中的。
另外innodb的页内格式也比较繁琐,占用了不少额外空间。 数据库存储引擎的数据组织 这个话题太大了,我的回答只能到这里了。
Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有