【问题标题】:Should I use InnoDB or MyISAM for a "write-only" table?我应该将 InnoDB 或 MyISAM 用于“只写”表吗?
【发布时间】:2011-04-24 05:22:09
【问题描述】:

我有一张桌子,我基本上只是在写字。

把它想象成一个“交易”列表,我在其中保存所有详细信息,并且我还在另一个表中存储了一个“总计”。出于性能考虑,该总数是多余的,但如果需要,可以从此事务表中重新计算。

从性能的角度来看,什么更好,记住几个人会同时插入(从不更新)到这个永远不会读取的表?

我应该使用 InnoDB 还是 MyISAM?

(我这里已经有性能问题了,我没有过早优化)

【问题讨论】:

    标签: mysql performance innodb archive myisam


    【解决方案1】:

    为此使用 ARCHIVE 存储方法。它正是为这种多写多读几乎从不的应用而设计的。

    【讨论】:

    • 谢谢你的想法!我不知道存档引擎。现在,从那篇文章来看,这似乎会节省磁盘空间,但不会比 MyISAM 快多少,对吗?
    • ARCHIVE 的写入速度比 myISAM 快。但是,如果你必须阅读它,它会很慢,因为一切都是全表扫描。您对应用程序的解释表明您确实很少阅读,所以应该没问题。
    【解决方案2】:

    通常您会将 MyISAM 用于只会增长的表。 MyISAM 还具有支持 MERGE 表的优势,因此您不必只有一张巨大的表。

    但是,如果您“从不”阅读它,为什么要使用表格呢?直接写入文件即可。我很好奇你的性能问题是什么。您可能会查看带有复制的 Blackhole 表类型。主设备上的黑洞,从设备上的 MyISAM 或存档。

    【讨论】:

    • 感谢您的回复。我可能想从中读取数据,而且从结构化表格中读取比从文件中读取要更方便。当然,如果有这样的表不切实际,我可以转到一个文件,但考虑到我正在管理的卷,它似乎不应该是。至于 Blackhole,我们还没有做复制,只有一个 MySQL。
    • 性能问题是,有时,整个 MySQL 服务器冻结几秒钟,延迟所有其他请求,并通过“慢查询日志”,这个查询似乎出现了很多,所以它是看起来很可疑,即使它应该是相当无辜的......
    • 也许,你会如何诊断它?
    • 死锁只会发生在 InnoDB 表中。 MyISAM 使用表锁定并且不支持事务。虽然技术上可行(使用 JOIN 进行更新),但您永远不会看到 MyISAM 出现死锁。
    • 我使用 MyISAM 表每天“记录”超过一百万条记录,没有任何问题。不确定您要记录多少。
    【解决方案3】:

    您还可以使用带有 INSERT DELAYED 的 MyISAM 来立即从您的插入中返回,并让 mysql 在其空闲时在单独的线程中插入该数据。从应用程序的角度来看,它将加快插入速度,避免插入争用。但是,如果服务器在写入之前崩溃,则会导致数据不一致...

    【讨论】:

      猜你喜欢
      • 2011-09-21
      • 1970-01-01
      • 2013-11-10
      • 2010-12-30
      • 1970-01-01
      • 2011-11-21
      • 2011-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多