Mysql varchar唯一列varchar(255)与varchar(50)的区别

4

我将始终向我的表中的特定列输入20个字符的内容。

我需要这一列是唯一的。

如果我将此列设置为varchar(255),而不是varchar(20),是否会影响SELECT查询的速度?

(输入的数据将始终为20个字符)

5个回答

5
如果输入的数据总是20个字符,那么为什么不考虑使用char(20)呢?使用varchar(20)将使用20个字节来存储字符和1个字节来存储长度。因此,如果有100万条记录,则将浪费100万个字节。
就速度而言,varchar(20)和varchar(255)之间的差别,我认为很难选择其中之一,它们都将使用21个字节,我没有看到一个比另一个更重要的性能优势或损失。

3
如果只有20个字符,为什么要指定255个字符呢?如果始终为20个字符,则即使是char(20)也更好。

未来的证明(我们可能会在明年升级SLI代码)。另外,我很好奇答案会是什么。 - David19801
1
不要过度未来化!你认为列宽是铭刻在石头上的吗?如果将来需要更改,那就在将来进行更改。现在最好将其设置为varchar(5000),以防万一。 - Cylindric
有没有任何理由我不应该将它设置为varchar(5000)?我以为最大值是255? - David19801
我的意思是,不要仅仅因为某天可能会用到而把所有东西都设置成最大值。特别是当相对于缩小列而言,增大列的大小通常非常容易时,更不要这样做。 - Cylindric

2

在选择查询中,缩短varchar的长度并不能提高速度,但可以增加插入新记录的速度。


2
如果你非常确定所有值都将是长度为20的固定长度,则应该选择使用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手册,我建议您阅读该主题的评论(如下所示)。
Kirby Wirby于2007年4月9日下午8:33发布。
考虑指标字段的情况,其值为“Y”或“N”。如果定义为CHAR,则字段仅需要一个字节。但是,如果定义为VARCHAR,则字段需要两个字节。

0

最好的做法是根据需要分配足够的空间,因为MySQL经常分配固定大小的内存块来保存值。

这对于排序或使用内存临时表的操作来说是不好的。对于使用磁盘临时表的文件排序也是一样。书籍《高性能MySQL》提供了更多关于这些问题的信息。我建议阅读它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接