Mysql varchar唯一列varchar(255)与varchar(50)


Mysql varchar unique column varchar(255) vs. varchar(50)

我总是在表的特定列中输入20个字符的内容。

我需要这一列是唯一的。

如果我将这列设置为varchar(255)而不是varchar(20),在SELECT查询中会有任何速度差异吗?

(输入的数据总是20个字符)

如果输入的数据总是 20个字符,那么为什么不考虑使用char(20)呢?使用varchar(20)将使用20个字节存储字符,1个字节存储长度。因此,如果有一百万条记录,一百万个字节将被浪费。

就varchar(20)和varchar(255)之间的速度而言,那么我认为选择它们中的一个并不困难,它们都将使用21字节,我没有看到任何显著的性能优势或损失。

如果它只能是20,为什么要指定255呢?如果总是20,甚至char(20)会更好。

在select查询中,减少varchar的长度不会增加速度,但可以增加插入新记录的速度

如果你非常确定所有的值都将是20 chars,并且它们将具有固定长度,那么请使用char(20),因为您将获得空间和稍微的速度。

Value       CHAR(4)  Storage Required   VARCHAR(4)  Storage Required
''          '    '           4 bytes            ''            1 byte
'ab'        'ab  '           4 bytes          'ab'           3 bytes
'abcd'      'abcd'           4 bytes        'abcd'           5 bytes
'abcdefgh'  'abcd'           4 bytes        'abcd'           5 bytes

上面的表格取自MySQL手册,我建议你阅读关于该线程的评论(示例如下)

by Kirby Wirby于2007年4月9日8:33pm发布

  • 考虑值为'Y'或'N'的指示符字段的情况。如果定义为CHAR,则该字段只需要一个字节。但是,如果定义为VARCHAR,则该字段需要两个字节。

最好是分配尽可能多的空间,因为MySQL经常分配固定大小的内存块来内部保存值。

这对于排序或使用内存临时表的操作是不好的。对于使用磁盘上临时表的文件排序也是如此。高性能MySQL一书提供了有关这些问题的更多信息。我建议你读一读