【问题标题】:MySQL ENUM option values impact max row size?MySQL ENUM 选项值影响最大行大小?
【发布时间】:2011-03-13 21:30:21
【问题描述】:

我正在试验 MySQL 枚举数据类型。我有一个 15 列的表,其中 7 列是 ENUM 数据类型。没有 VARCHAR,最大列 - 类型 DATETIME。所以我应该在 mysql 的 65535 字节限制之内。即使在 InnoDB 的 1000 字节限制内。

ENUM 类型有很多大字符串的可能性(2 列的范围为 1000 秒)。我只是更改了表格以向表格添加更多 ENUM 值

ALTER TABLE <tablename> MODIFY <enumCol> ([...1000 values each of max 40 bytes]);

然后得到这个错误-

ERROR 1117 (HY000): Too many columns  

我对此进行了研究,发现此错误与 MySql 表的最大行大小有关。 另外,我在这里读到http://dev.mysql.com/doc/refman/5.1/en/column-count-limit.html -

每个表都有一个包含表定义的 .frm 文件。服务器使用以下表达式来检查文件中存储的一些表信息是否与 64KB 的上限

这些 ENUM 值类型是否偶然存储在这里并触发错误(使 .frm 文件 > 64K)?还是发生了完全不同的事情?

【问题讨论】:

  • errrm - 让我说对了,您最多使用 7 个枚举列,每个列可能有 0 到 1000 个值?
  • 其中只有一个有 1000 个值。其余的在 50 到 100 之间。我已经阅读了 ENUMS 的优缺点,我想测试它可以给我带来多少速度改进。测试样本有 1100 万行。

标签: mysql enums


【解决方案1】:

According to the MySQL documentationENUM 列应该只占用 1 到 2 个字节的存储空间,具体取决于枚举中的选项数量。所以它对行大小的影响应该是最小的。

然而,如果你有很长的字符串作为可能的枚举值,它不会影响你的行大小(因为只有索引存储在行中,而不是实际的字符串值),但可能会超过 64KB 的限制表定义文件。

【讨论】:

  • @Jai:可能。这似乎没有具体的错误,而且大多数时候它是由太多的列引起的。
  • 我已经转储了 ENUM。它确实在恰好 1000 个值之后停止。想知道这是否也触发了这个错误。
猜你喜欢
  • 2015-06-22
  • 2016-09-08
  • 2014-11-05
  • 2017-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-19
  • 2013-04-03
相关资源
最近更新 更多