我有一个包含 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 中却没有。
最佳答案
因此,您可能需要考虑一下 Mark Byers 在上面的评论中所说的内容。在数据检索和查询优化方面,拥有良好的表结构非常重要。但话虽如此,这种改变并不总是可能的。根据我对这两个引擎的了解,这实际上取决于您使用数据库的目的。 InnoDB 支持事务和行锁定,而 MyIsam 不支持。如果我没记错的话,MyIsam 也不支持外键关系,所以如果你在表结构中依赖它们,MyIsam 就出局了。另一方面,MyIsam 支持 InnoDB 不支持的全文搜索,但您可以通过使用 Lucene 或其他库构建自己的搜索功能来解决这个问题。希望这有帮助......
关于mysql - 对于大量列,MyISAM 类型表会比 InnoDB 更好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2548444/