【问题标题】:Mysql varchar unique column varchar(255) vs. varchar(50)Mysql varchar 唯一列 varchar(255) 与 varchar(50)
【发布时间】:2011-12-02 11:30:10
【问题描述】:

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

我需要此列是唯一的。

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

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

【问题讨论】:

    标签: php mysql


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 面向未来(我们可能会在明年升级 SLI 代码)。另外,我很想知道答案是什么。
      • 不要面向未来!你认为列宽是刻在石头上的吗?如果您将来需要更改,请在将来更改它in。现在最好将其设置为 varchar(5000),以防万一。
      • 有什么理由我不应该将它设置为 varchar(5000) 我认为最大值是 255?
      • 我的意思是,不要只是为了有一天你可能需要它而将所有东西都设置为 MAX。尤其是当增加列的大小通常比减小列的大小非常容易时。
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

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

          这对排序或使用内存临时表的操作不利。使用磁盘临时表文件排序也会发生同样的事情。 High Performance MySQL 一书提供了有关这些问题的更多信息。我建议阅读它。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-02-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-06-23
            • 2011-08-19
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多