【发布时间】:2010-03-30 20:25:29
【问题描述】:
我有一个包含 238 列的 MySQL InnoDB 表。其中 56 个是 TEXT 类型,27 个是 VARCHAR(255)。
当用户有时插入数据时,我收到 MySQL 错误 139。经过研究,我发现我可能遇到了 InnoDB 行大小/列大小/列数限制。 (我这样说是因为这三件事之间的具体限制是相互依赖的。)
Docs on InnoDB 给出限制的概念。如果我将此表切换到 MyISAM 是否有可能解决问题?
我了解最大行大小为 65,535 字节。我想我正在以某种方式达到 InnoDB 的额外 8000 字节限制。
切换到 PostgreSQL 也是一个远程选项,但需要更长的时间。
关于列数:
此表支持的类代表问卷。有数百个问题。
每一列代表一个属性,该属性清楚地属于CapitalGrantProposal类,不属于其他类。
我可以将列分布在多个表中 -- 我可以有表 capital_grant_proposal_part_1s、capital_grant_proposal_part_2s 等。但是,这会增加复杂性而没有任何好处。
更新:
尝试制作 MyISAM 表,它可以工作。所以我在 InnoDB 中得到 MySQL 错误 139,但在 MyISAM 中没有。
【问题讨论】:
-
出于好奇,你为什么有这么多栏目?
-
您是否考虑过您的表结构是否是一个好的设计,或者您是否应该重新设计它? 238 列听起来很疯狂。
-
为什么?因为它遵循业务需求。它有什么疯狂的?这是 2010 年。当代的 RDBMS 应该能够轻松处理具有 100 多个列的表。我是否考虑过它是否是一个好的设计?是的。
-
你必须明白,如果没有一定程度的怀疑,很难考虑一个有 238 列的表 all 满足 3NF。
标签: mysql