我的印象是,将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