mysql的int unsigned_MySQL:将int字段设置为unsigned可节省大量空间.为什么?

我的印象是,将int字段设置为signed vs unsigned不会节省任何空间.今天,我将一些列设置为无符号,因为它们从不存储负值,并注意到表大小减少了15%.当我将某些int列设置为unsigned时,某些表的大小没有减小,而某些表的大小却显着减小.有人对此有解释吗?

解决方法:

@Frank Schmitt和@Kenny是正确的-如果您只查看数据类型更改前后的文件大小,则会看到不同的效果.有符号整数和无符号整数每个占用4个字节,这两个都不占用更多空间.

当您添加或更改列时,以及在某些其他情况下,MySQL执行表重组.也就是说,它将表的内容复制到新文件,完成后将其删除旧文件并重命名新文件.

如果旧文件由于过去的DELETE而有许多未使用的空间,则在磁盘上看起来将比其中的数据大.您可以使用以下方法更精确地度量数据和索引使用的空间:

mysql> SHOW TABLE STATUS FROM mydatabasename LIKE 'mytablename'\G

该状态的data_length和index_length字段显示所需的空间.另一个字段data_free显示数据文件中作为碎片的空间量,在执行ALTER TABLE时应(或多或少)回收该空间.

标签:mysql

来源: https://codeday.me/bug/20191102/1989130.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值