我有一个大约有 100000 行的表。它有 62.6 MB,并且没有任何开销。我将 2 列从 varchar(255)
更改为 varchar(2047)
。这些列用于 URL。
更改后,表的行数仍然相同,但大小减少到 59.2 MB。
我很困惑为什么会发生这种情况。 varchar(2047)
不应该是相同大小或更大吗?有人可以解释为什么 varchar 长度的增加会导致尺寸变小吗?
最佳答案
VARCHAR 和 CHAR 差异
- CHAR 长度是固定的。例如: CHAR(30) 意味着它将存储固定的 30 个字符,即使您插入一个 value 为 10 个字符,它会尝试添加一些填充。
- VARCHAR 是可变大小的长度。 VARCHAR(300) 表示最多存储 300 个字符。数据库没有为其保留300字节。它只会存储您输入的长度。
- 当您更新具有更大长度的新值时,它将使用溢出指针。
尺寸减小
我不知道确切的原因,但这是我所相信的。
- 当你删除一条记录时,MySQL并没有真正删除。它只是将记录标记为已删除,并在插入新数据时重复使用。
- 已删除的记录通过链表(对于可变大小的记录)进行维护,以便可以快速找到已删除的记录以供重用。
- 这意味着,当您删除数据时,数据库的大小仍保持不变,直到您运行
OPTIMIZE TABLE your_table_name
再次重新组织数据库。 - 我认为导致大小减小的原因是当您更改表架构时,数据库将尝试再次重新组织数据库,以便不再删除数据或使用空间。
关于mysql - 增加 varchar 长度会减少 MySQL 的大小吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24112248/