mysql - 对于大量列,MyISAM 类型表会比 InnoDB 更好吗?

标签 mysql

我有一个包含 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_1scapital_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/

相关文章:

mysql - SPAGOBI服务器爱管理中如何编写带where子句的动态select查询语句

php - 对 PDO 和 mysql_xxx 使用一个数据库连接

mysql - 如何在 MYSQL 中使用 AND 查询 JSON 数组

php - 谷歌sql未插入

PHP MYSQL 简单程序逻辑

php - 如何在mysql中获取逗号分隔的id的名称?

php - 左连接同一字段选择所有行

php - mysql: 1 INSERT INTO 查询两个结果

mysql - 单表中的简单选择查询

java - 设置准备好的语句参数时出现 NullPointerException