2011-03-13 66 views
0

我正在试验MySQL枚举数据类型。我有一个表15列,其中7个是ENUM数据类型。否VARCHARs,最大列类型DATETIME。所以我应该在mysql的65535字节限制内。即使在InnoDB的1000字节限制内。MySQL ENUM选项值影响最大行大小?

ENUM类型有很多很大的字符串可能性(范围在1000列2列)。我只是改变了表更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

难道这些枚举值类型入门万一存放在这里的上限表信息,这触发错误(使.FRM文件> 64K)?还是其他事情正在发生?

+0

errrm - 让我说明一下,您最多使用7个枚举列,每列可能有0到1000个值? – 2011-03-13 21:37:24

+0

其中只有一个有1000个值。休息是在50至100的范围内。我已阅读关于ENUMS的优点和缺点,我想测试它可以给我多少速度改善。测试样品有11百万行。 – Jai 2011-03-13 21:44:00

回答

2

According to the MySQL documentationENUM列应该只占用1到2个字节的存储空间,具体取决于枚举中的选项数量。所以它对行大小的影响应该是最小的。但是,如果你有很长的字符串作为可能的枚举值,它不会影响你的行大小(因为只有索引存储在行中,而不是实际的字符串值),但可能会超过64KB的限制的表格定义文件。

+0

会超过64KB限制会导致此错误吗? – Jai 2011-03-13 23:19:30

+0

@Jai:可能。似乎没有一个特定的错误,因为列数太多会导致大部分时间。 – 2011-03-13 23:36:58

+0

我已经抛弃了ENUM。它确实在1000个值之后停止。想知道如果这也可能触发了这个错误。 – Jai 2011-03-14 10:39:37