正如文档所说,mysql 不会分配您为 varchar 指定的全部空间。它存储数据的实际长度。所以我想那里也可能有副作用。就像如果varchar记录的原始长度是10,现在我想将它更新为20,仍然没有达到指定的限制50。但是,以前分配的空间现在已经不够了。所以我的问题是 MySQL 如何处理这种情况?移动该记录之后的所有内容需要很长时间吗?还是必须这样做?有没有人可以告诉我它是如何在内部工作的?提前致谢!
问问题
114 次
1 回答
1
MySQL 处理得很好,你不应该关心细节。尽管具有不规则长度的记录比具有固定长度的记录管理起来要慢一些,但是如果您的记录通常小于固定大小,则通过读取显着更少的数据可以获得巨大的性能提升。
请记住,CHAR
列总是以其最大大小存储和检索。即使平均记录只有 10-15 个字节的数据,一个 255 个字符的字段也需要传输 255 个字节。这是一个很大的开销。
使用CHAR
会带来一大堆其他问题,因为该字段将始终是那个长度,这意味着它必须完整地传输,并且通常在客户端中被剥离。这比它的价值要麻烦得多。
在现代时代,CHAR
列的唯一用途是用于始终定义且始终具有特定大小的事物。一个示例可能是用作标识符的 40 个字符的十六进制编码哈希,但这些通常很少见,并且在几乎所有情况下VARCHAR
都可以正常工作。
于 2012-07-18T20:33:10.790 回答