【发布时间】:2011-12-02 11:30:10
【问题描述】:
我将始终在表格的特定列中输入 20 个字符的内容。
我需要此列是唯一的。
如果我将此列设置为 varchar(255) 而不是 varchar(20),SELECT 查询的速度是否会有所不同?
(输入的数据将始终为 20 个字符)
【问题讨论】:
我将始终在表格的特定列中输入 20 个字符的内容。
我需要此列是唯一的。
如果我将此列设置为 varchar(255) 而不是 varchar(20),SELECT 查询的速度是否会有所不同?
(输入的数据将始终为 20 个字符)
【问题讨论】:
如果输入的数据总是 20 个字符,那么为什么不考虑使用 char(20)。使用 varchar(20) 将使用 20 个字节存储字符和 1 个字节存储长度。所以如果有 100 万条记录,就会浪费 100 万字节。
就 varchar(20) 和 varchar(255) 之间的速度而言,我认为选择其中一个可能并不难,它们都将使用 21 个字节,我没有看到任何显着的性能一个人的利益或损失。
【讨论】:
如果只能是 20,为什么要指定 255?如果总是 20,甚至 char(20) 会更好。
【讨论】:
在选择查询中,您不会通过减少 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
above table is taken from MySQL Manual 和我建议您阅读该线程上的 cmets(示例如下)
Kirby Wirby 于 2007 年 4 月 9 日晚上 8:33 发表
【讨论】:
最好的办法是根据需要分配尽可能多的空间,因为 MySQL 经常分配固定大小的内存块来在内部保存值。
这对排序或使用内存临时表的操作不利。使用磁盘临时表的文件排序也会发生同样的事情。 High Performance MySQL 一书提供了有关这些问题的更多信息。我建议阅读它。
【讨论】: