【问题标题】:Varchar type and performance issuesVarchar 类型和性能问题
【发布时间】:2011-12-04 17:27:45
【问题描述】:

我正在为数据库建模,我想询问 Varchar 类型。

Varchar(50) 和 Varchar(100) 之间有性能差异吗?

例如,我有一个 varchar(50) 字段,用户在该字段中保存了 5 个字符数据,另一个用户在该字段中保存了 25 个字符。但是没有人将 50 个字符数据保存到该字段。所以我必须将这个字段设为 varchar(25) 以获得最佳性能?

【问题讨论】:

    标签: mysql sql tsql varchar


    【解决方案1】:

    假设SQL Server(因为你也列出了MySQL),没有。

    只要字段中的数据相同,开销就相同。

    【讨论】:

    【解决方案2】:

    对于大多数实现,VARCHAR(50)VARCHAR(25) 之间可能存在无关紧要的性能差异;可能不值得担心。

    根据经验,将字段设置为您认为自己想要使用的大小。

    这里有一些相关的讨论:
    What are the optimum varchar sizes for MySQL?

    从该讨论中,这里是相关的 MySQL 手册页:
    http://dev.mysql.com/doc/refman/5.0/en/char.html

    【讨论】:

      【解决方案3】:

      不,如果您定义 varchar(50) 并且最多只存储 10 个字符,则不会降低性能,举个例子。 Varchar 将始终按行存储数据。

      【讨论】:

        【解决方案4】:

        编辑:对于 MySQL:不。至少,除非您有一些介于 50-100 个字符之间的字符串。

        通常 varchars 存储为长度 + 数据;仅存储提供的数据。 varchar(100) 的长度需要更多字节(最大 300 字节,假设 utf8 3-bytes-per-character),但这还不够你关心。

        索引也是如此。它只是您实际存储的数量。

        【讨论】:

        • 我该如何测试这个?是否有任何工具 MSSQL 或 MySQL 用于测试此事件?
        【解决方案5】:

        列长度应反映用户希望在该列中存储的数据的最大长度。如果您的应用程序是根据经过充分研究的要求设计的,那么该长度应该有一些理由;仅仅因为没有人在该列中存储 > 25 个字符的字符串 并不意味着他们有一天不会。

        要回答您问题的另一方面,减少列的长度不会提高性能。正如文档所言,该列仅占用存储空间以适应分配的数据。因此,只有 25 个字节数据的 VARCHAR(100) 列不会比具有相同数据的 VARCHAR(25) 列占用更多的存储空间。 Find out more.


        存储是性能问题吗?可以,因为磁盘上较短的记录等于每次 I/O 操作检索到的记录更多。

        【讨论】:

          猜你喜欢
          • 2012-09-01
          • 2011-08-16
          • 1970-01-01
          • 2018-02-07
          • 1970-01-01
          • 1970-01-01
          • 2015-09-20
          • 2013-07-09
          • 1970-01-01
          相关资源
          最近更新 更多