我即将在我的表中添加一个新列,其中包含500,000个现有行。为varchar选择一个大值有什么害处吗?如何为现有行分配varchars?它占用了大量磁盘空间吗?运行时的记忆效应怎么样?
我正在寻找MySQL特定的行为细节,而不是一般的软件设计建议。
答案 0 :(得分:3)
为varchar字段选择一个大值没有坏处。仅存储实际数据,并且MySQL不为每条记录分配完整的指定长度。它存储数据的实际长度以及字段,因此不需要存储任何填充或分配未使用的内存。
答案 1 :(得分:1)
取决于你在做什么。有关详细信息,请参阅相关文档页面:
http://dev.mysql.com/doc/refman/5.0/en/char.html
磁盘空间的代价与您所拥有的代价没有任何不同。 TEXT类型,从性能角度来看,它实际上可能更快。
主要问题是最大行大小。请注意,存储引擎之间的确切含义不同。有关所选存储引擎的最佳行大小信息,请参阅MySQL文档。
我还应该补充一点,可以在最小化行大小方面具有性能优势,但它实际上取决于您的工作负载,索引以及行的大小,无论它是否有意义对你而言。
答案 2 :(得分:1)
MySQL VARCHAR字段存储内容,加上2个字节的长度。因此空的VARCHAR字段将占用空间来标记它们的长度。
此外,如果这是表中唯一的VARCHAR字段,并且您的存储引擎是MyISAM,则会强制生成动态行格式,这可能会导致性能下降(测试将确认)。
http://dev.mysql.com/doc/refman/5.0/en/column-count-limit.html