我总是在表的特定列中输入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一书提供了有关这些问题的更多信息。我建议你读一读