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

时间:2011-12-02 11:30:10

标签: php mysql

我将永远将20个字符的内容输入表格中的特定列。

我需要此列是唯一的。

如果我将此列设置为varchar(255)而不是varchar(20),那么SELECT查询是否会有任何速度差异?

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

5 个答案:

答案 0 :(得分:5)

如果输入的数据总是 20个字符,那么为什么不考虑使用 char(20)。使用varchar(20)将使用20个字节来存储字符,使用1个字节来存储长度。所以如果有100万条记录,就会浪费100万字节。

就varchar(20)和varchar(255)之间的速度而言,我不认为选择其中一个可能非常困难,它们都将使用21个字节,我没有看到任何显着的性能一个人的利益或损失超过他人。

答案 1 :(得分:3)

如果它只能是20,你为什么要指定255?如果它总是20,那么即使char(20)也会更好。

答案 2 :(得分:2)

在选择查询中,您不会通过减少varchar的长度来提高速度,但可以提高插入新记录的速度

答案 3 :(得分:1)

如果您非常确定所有值都是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

above table is taken from MySQL Manual我建议你阅读该主题的评论(示例下方)

Kirby Wirby于2007年4月9日晚上8:33发表

  • 考虑指标字段的情况,其中值为“Y”或“N”。如果定义为CHAR,则该字段仅需要一个字节。 但是,如果定义为VARCHAR,则该字段需要两个字节。

答案 4 :(得分:0)

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

这对排序或使用内存临时表的操作不利。使用磁盘临时表 filesorts 也会发生同样的情况。书高性能MySQL 提供了有关这些问题的更多信息。我建议你阅读。