【问题标题】:Will MyISAM type tables work better than InnoDB for large numbers of columns?对于大量列,MyISAM 类型的表会比 InnoDB 更好吗?
【发布时间】: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_1scapital_grant_proposal_part_2s 等。但是,这会增加复杂性而没有任何好处。


更新:

尝试制作 MyISAM 表,它可以工作。所以我在 InnoDB 中得到 MySQL 错误 139,但在 MyISAM 中没有。

【问题讨论】:

  • 出于好奇,你为什么有这么多栏目?
  • 您是否考虑过您的表结构是否是一个好的设计,或者您是否应该重新设计它? 238 列听起来很疯狂。
  • 为什么?因为它遵循业务需求。它有什么疯狂的?这是 2010 年。当代的 RDBMS 应该能够轻松处理具有 100 多个列的表。我是否考虑过它是否是一个好的设计?是的。
  • 你必须明白,如果没有一定程度的怀疑,很难考虑一个有 238 列的表 all 满足 3NF。

标签: mysql


【解决方案1】:

因此,您可能需要考虑 Mark Byers 在上面的评论中所说的内容。在数据检索和查询优化方面,拥有良好的表结构很重要。但是话虽如此,但并非总是可以进行此类更改。根据我对这两种引擎的了解,这实际上取决于您使用数据库的目的。 InnoDB 支持事务和行锁定,而 MyIsam 不支持。如果我没记错的话,MyIsam 也不支持外键关系,所以如果你在表结构中依赖它们,MyIsam 就不存在了。另一方面,MyIsam 支持 InnoDB 不支持的全文搜索,但您可以通过使用 Lucene 或其他一些库构建自己的搜索功能来解决这个问题。希望这会有所帮助....

【讨论】:

    猜你喜欢
    • 2011-05-05
    • 2011-09-27
    • 2011-10-14
    • 2016-06-14
    • 2011-04-17
    • 2013-11-10
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    相关资源
    最近更新 更多