增加varchar长度减少了MySQL的大小?

时间:2014-06-09 00:27:53

标签: mysql sql

我有一张约100000行的表。它的62.6 MB并没有开销。我将varchar(255)的2列更改为varchar(2047)。列用于URL。 更改后,表仍具有相同的行数,但大小减少到59.2 MB。

我很困惑为什么会这样。不应该varchar(2047)是相同大小还是更大?有人可以解释为什么varchar长度的增加会导致更小的尺寸吗?

1 个答案:

答案 0 :(得分:1)

VARCHAR和CHAR差异

  • CHAR长度是固定的。例如: CHAR(30)表示它将存储固定的30个字符,即使你插入一个 如果值为10个字符,则会尝试添加一些填充。

enter image descriptionhere

  • VARCHAR是可变大小的长度。 VARCHAR(300)表示最多可存储300个字符。数据库没有为它保留300个字节。它只会存储您输入的长度。

enter image description here

  • 当您使用更大的长度更新新值时,它将使用溢出指针。

enter image description here

减小尺寸

我不知道确切的原因,但这就是我所相信的。

  • 删除记录时,MySQL不会真正删除。它只是将记录标记为已删除,并在插入新数据时重复使用。
  • 删除的记录由链接列表(用于可变大小的记录)维护,以便它可以快速找到已删除的记录以供重用。

enter image description here

  • 这意味着当您删除数据时,数据库的大小仍然相同,直到您再次运行OPTIMIZE TABLE your_table_name重新组织数据库。
  • 我认为导致大小减小的是当您更改表架构时,数据库将尝试再次重新组织您的数据库,以便不再有已删除的数据或已用空间。