【问题标题】:Whats the most efficient MySQL column types for this data?该数据最有效的 MySQL 列类型是什么?
【发布时间】:2010-05-22 18:42:42
【问题描述】:

我有几个表,每个表都有一些非常标准的数据。有人可以通过告诉我此数据的最佳列类型来帮助我优化它们吗?他们旁边的就是我目前拥有的。

Number (max length 7) --> MEDIUMINT(8) Unsigned
Text (max length 30) --> VARCHAR(30)
Text (max length 200) --> VARCHAR(200)
Email Address (max length 200) --> VARCHAR(200)
Number (max length 4) --> SMALLINT(5) Unsigned
Number (either 0 or 1) --> TINYINT(1) Unsigned
Text (max length 500) --> TEXT

有什么建议吗?我只是在猜测,所以我知道其中一些是错误的......

【问题讨论】:

    标签: mysql mysqladmin column-types


    【解决方案1】:

    很抱歉,这不是您问题的直接答案,但我认为这需要指出。我想你可能误解了列类型后面括号中的整数的用途。

    对于VARCHAR 类型,您可能已经知道,它限制了最大长度。但是,它不会影响用于存储特定字符串的字节数。长度为 5 的字符串将需要相同数量的字节存储,无论它存储在 VARCHAR(100) 还是 VARCHAR(200) 中。

    对于整数类型,数字与存储的字节数无关。它是显示宽度,这是另一回事。见manual:

    MySQL 支持另一个扩展,用于在类型的基本关键字后面的括号中可选地指定整数数据类型的显示宽度(例如,INT(4))。应用程序可以使用这个可选的显示宽度来显示宽度小于为列指定的宽度的整数值,方法是用空格向左填充它们。 (也就是说,这个宽度存在于结果集返回的元数据中。是否使用它取决于应用程序。)

    显示宽度不限制可存储在列中的值的范围,也不限制宽度超过为列指定的值显示的位数。

    【讨论】:

      【解决方案2】:
      Number (either 0 or 1) --> TINYINT(1) Unsigned
      

      这应该是一个布尔值。

      【讨论】:

        【解决方案3】:

        你已经明白了。

        请注意,您无法使用列类型优化任何内容。使用索引。

        【讨论】:

          【解决方案4】:

          取决于您对“高效”的定义。就速度而言,CHAR 可以比 VARCHAR 更快(因为每一行的长度相同,因此查找给定记录变得简单)。但是你所有的字段都必须有固定的长度,或者不要打扰。

          【讨论】:

          • 我认为现代数据库使用索引来查找特定记录。所以,对齐并不重要。
          • 现代数据库使用索引来查找特定记录(即:说“x=3 的记录是记录#R”,然后另一个(内置)索引来查看“记录 R 是在表数据文件中的位置 P”。如果所有记录的大小相同,则可以完全跳过最后一次查找。
          猜你喜欢
          • 2012-02-27
          • 2014-08-12
          • 1970-01-01
          • 2021-04-25
          • 2023-03-08
          • 1970-01-01
          • 2011-05-06
          • 2014-10-24
          • 1970-01-01
          相关资源
          最近更新 更多