mysql innodb大于100%_mysql – 为什么InnoDB表的大小远大于预期?

我正在试图找出不同存储引擎的存储要求.我有这张桌子:

CREATE TABLE `mytest` (

`num1` int(10) unsigned NOT NULL,

KEY `key1` (`num1`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

当我插入一些值然后运行show table status;我得到以下内容:

+----------------+--------+---------+------------+---------+----------------+-------------+------------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+---------+

| Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Collation | Checksum | Create_options | Comment |

+----------------+--------+---------+------------+---------+----------------+-------------+------------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+---------+

| mytest | InnoDB | 10 | Compact | 1932473 | 35 | 67715072 | 0 | 48840704 | 4194304 | NULL | 2010-05-26 11:30:40 | NULL | NULL | latin1_swedish_ci | NULL | | |

注意avg_row_length是35.我感到困惑的是,当我只存储一个不可为空的整数时,InnoDB不会更好地利用空间.

我在myISAM上运行了同样的测试,默认情况下myISAM在这个表上每行使用7个字节.当我跑

ALTER TABLE mytest MAX_ROWS=50000000, AVG_ROW_LENGTH = 4;

导致myISAM最终正确使用5字节行.

当我为InnoDB运行相同的ALTER TABLE语句时,avg_row_length不会改变.

为什么只存储一个4字节的无符号整数时需要这么大的avg_row_length?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值