我即将为我的表添加一个新列,其中包含500,000个现有行。为varchar选择大的值会有什么伤害吗? varchars究竟是如何为现有行分配的?它占用大量的磁盘空间吗?在运行时如何记忆效应?在MySQL中为varchar选择一个大值会有什么危害吗?
我正在寻找MySQL的具体行为细节,而不是通用的软件设计建议。
我即将为我的表添加一个新列,其中包含500,000个现有行。为varchar选择大的值会有什么伤害吗? varchars究竟是如何为现有行分配的?它占用大量的磁盘空间吗?在运行时如何记忆效应?在MySQL中为varchar选择一个大值会有什么危害吗?
我正在寻找MySQL的具体行为细节,而不是通用的软件设计建议。
为varchar字段选择较大的值没有任何坏处。只有实际的数据将被存储,并且MySQL不会为每条记录分配完整的指定长度。它存储数据的实际长度以及字段,因此它不需要存储任何填充或分配未使用的内存。
取决于你在做什么。对于一些细节请参阅相关的文档页面:
http://dev.mysql.com/doc/refman/5.0/en/char.html
磁盘空间的惩罚是不是真的比你有什么例如有什么不同TEXT类型,从性能角度来看,它实际上可能会更快。
主要问题是最大行大小。请注意,存储引擎之间的确切含义不同。请查阅您的存储引擎的MySQL文档以获取最大行大小信息。
我还应该补充说可以减少行的大小,但是这取决于你的工作量,索引和行的大小,不管它对你有意义。
MySQL VARCHAR字段存储内容,加上2个字节的长度。因此,空的VARCHAR字段将占用空间来标记它们的长度。另外,如果这是表中唯一的VARCHAR字段,并且存储引擎是MyISAM,它将强制动态行格式,这可能会导致性能下降(测试将确认)。
http://dev.mysql.com/doc/refman/5.0/en/column-count-limit.html
你能解释一点在性能方面。会有大的空varchar行有任何性能问题? – erotsppa 2009-11-17 18:48:36