8

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

我正在考虑

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

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

我想知道哪种方法更好?

更加具体

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

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

4

2 回答 2

12

这些天来,我总是默认使用 InnoDB,尤其是在您提到的 MyISAM 遭受全表锁定的写入密集型表上。这是一个中肯的比较。

使用 MyISAM 的原因:

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

使用 InnoDB 的原因:

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

以上内容取自该站点,该站点似乎不再起作用。

于 2010-01-22T02:24:47.143 回答
2

每个的优点和缺点。

对于 (1) 优点:更少的磁盘空间使用,myisam 读取重的访问模式更快

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

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

于 2010-01-22T02:20:40.770 回答