对于一个或两个字符的字符串,哪个更有效:CHAR(2) 或 VARCHAR(2)?
Posted
技术标签:
【中文标题】对于一个或两个字符的字符串,哪个更有效:CHAR(2) 或 VARCHAR(2)?【英文标题】:Which is more efficient for a one or two-character string: CHAR(2) or VARCHAR(2)? 【发布时间】:2011-08-04 22:08:27 【问题描述】:一个非常快速的方法 - 在 mysql 中将可能是一个或两个字符的数据存储为 CHAR(2) 或 VARCHAR(2) 是否更有效?
谢谢!
【问题讨论】:
这两种数据类型不等价。您是否在问哪个更有效地存储恰好 2 个字符的字符串? 【参考方案1】:就所需的存储空间而言,您最好使用 CHAR(2),因为 VARCHAR(2) 类型将需要一个额外的字节来存储长度:
值 CHAR(2) 需要存储 VARCHAR(2) 需要存储 '' ' ' 2 字节 '' 1 字节 'a' 'a' 2 个字节 'a' 2 个字节 'ab' 'ab' 2 个字节 'ab' 3 个字节更多详情请见10.4.1. The CHAR and VARCHAR Types。
更多信息:What's the difference between VARCHAR and CHAR?
【讨论】:
【参考方案2】:在空间方面,CHAR(2) 更好。看到这个:http://dev.mysql.com/doc/refman/5.0/en/char.html
如果你有更长的像 CHAR(100) 和 VARCHAR(100),哪个更好的空间使用取决于你拥有的数据。
在任何情况下,就查询的效率而言,在您负担得起的情况下拥有固定长度的记录总是一个好主意(数据库可以更好地优化固定长度的列)。
所以 CHAR(2) 在空间和时间方面看起来比 VARCHAR(2) 更胜一筹。
【讨论】:
【参考方案3】:不过,我会问,varchar 和 char 之间的效率差异值得吗?似乎任何性能提升充其量都可以忽略不计。
【讨论】:
这更像是一个评论而不是一个答案......至于它是否有所作为,这将取决于用例。长度为 2 时,VARCHAR2 的每个字段的存储开销为 50%。如果有大量相似的字段和行,就会开始快速加起来。【参考方案4】:在存储方面,VARCHAR(255)
足够智能,可以只存储给定行所需的长度,而 CHAR(255)
总是存储 255 个字符。
【讨论】:
以上是关于对于一个或两个字符的字符串,哪个更有效:CHAR(2) 或 VARCHAR(2)?的主要内容,如果未能解决你的问题,请参考以下文章