MyISAM和InnoDB表在一个数据库中

时间:2010-01-22 02:11:53

标签: mysql innodb myisam

我有一个包含大约30个表的数据库,其中5个表是写密集型的。

我在考虑

  1. 转换5个写入密集型表以使用InnoDB引擎,并将其余部分保留在MyISAM引擎上

  2. 转换所有表以使用InnoDB引擎。

  3. 我想知道哪种方法更好?

    更具体一点

    我想在MyISAM引擎上保留一些表的原因是其中一些表有大约1,000,000行。我不确定转换为InnoDB后这些表上的“SELECT COUNT(*)”查询会有多慢。

    我还没有做过测试。在开始转换之前,我更喜欢从你们这里得到一些建议。

2 个答案:

答案 0 :(得分:12)

现在,我总是默认使用InnoDB,特别是在你提到的写密集表中,MyISAM遭受全表锁定。这是一个比较点。

使用MyISAM的原因:

  • 对于选择重负载的表来说,表格非常快
  • 表级锁定限制了它们在写密集型多用户环境中的可伸缩性。
  • 最小的磁盘空间消耗
  • 全文索引
  • 合并和压缩表。

使用InnoDB的原因:

  • ACID交易
  • 行级锁定
  • 一致性读取 - 允许您达到出色的读写并发性。
  • 主键群集 - 在某些情况下可以提供出色的性能。
  • 外键支持。
  • 可以缓存索引页面和数据页面。
  • 自动崩溃恢复 - 如果MySQL关闭不洁的InnoDB表仍将 - 恢复到一致状态 - 不像MyISAM那样检查/修复。
  • 与非事务性存储引擎相比,所有更新都必须通过InnoDB中的事务引擎(性能通常会降低)。

上述内容取自this site,似乎不再起作用。

答案 1 :(得分:2)

每个人的利弊。

(1) 专业人士:磁盘空间使用量减少,myisam读取繁重访问模式的速度更快

缺点:必须在innodb缓冲区和myisam密钥缓冲区之间共享内存。 innodb表比他们的myisam表大约4倍。程序代码必须适应死锁处理。

请记住,如果您要更改索引列或主键,innodb也会锁定。