代码之家  ›  专栏  ›  技术社区  ›  significance

mysql列数据类型对保持效率很重要吗?

  •  3
  • significance  · 技术社区  · 14 年前

    我是否需要仔细选择mysql数据库列的数据类型,或者我是否可以在不影响效率的情况下将其设置为varchar(99999)?

    谢谢:)

    5 回复  |  直到 14 年前
        1
  •  2
  •   Riedsio    14 年前

    毫无疑问,对于非平凡的数据库,数据类型是 非常 很重要。

    对于mysql功能(例如时间、字符串或聚合函数),选择正确的数据类型非常重要。

    对于模式功能(例如连接),选择正确的数据类型很重要。

    对于性能来说,每个字段的每个字节都很重要。

    所有长瓦查人的数据库将是令人遗憾的。

    DBA的存在是有原因的。:)

        2
  •  3
  •   cdhowie    14 年前

    选择表示要存储的数据的数据类型。如果要存储数字,请使用为存储数字而设计的数据类型。如果要存储日期,请使用为存储日期而设计的数据类型。

    如果所有数据实际上都是文本,请为长度可能变化的列选择VARCHAR,为长度永远不会变化的列选择CHAR,或为尾随空格不重要的列选择CHAR。VARCHAR需要额外的一个字节来存储字段的长度,并且只会因为长度是可变的而带来很小的性能损失,这会在提取或存储数据时创建更多的步骤。

    注意,如果您将VARCHAR列作为索引的一部分使用,则可能会对VARCHAR列施加大小限制,因为MySQL上索引的最大大小为1000字节。因此,如果将所有列设为VARCHAR(100),则只能围绕三个这样的字段创建复合索引。

    (作为另一种注释,类型VARCHAR(99999)不存在于MySQL中——VARCHAR字段的最大长度为255,因为在记录中仅使用一个字节来存储每个VARCHAR的长度。)

        3
  •  3
  •   bakoyaro CoreyRDean    14 年前

    我发现在设计新表时最好准确地声明列类型。例如,它有助于确保只有一个数字被输入到一个应该只有一个数字的列中,比如在价格中。如果您的代码尝试使用美元金额,并且由于用户可以在中输入任何自由格式字符串而检索到“Asd$%*@”,那么您的代码会怎么做?

    通过准确地声明列类型,可以确保检索的数据与请求的数据类型相同,而无需进行任何繁琐的文本解析和错误检查。

        4
  •  2
  •   Lucas Moeskops    14 年前

    取决于你想做什么。为了便于排序,您需要将整数存储为整数,我会说:) 对于小型数据库,尽管您可能不会因为将所有内容都变成varchar而受到太多的影响。

        5
  •  2
  •   Danosaure    14 年前

    你也可以用 select * from your_table procedure analyse(2, 5) (根据您的方便调整数字)了解MySQL如何看待您的表。