将切换到MyISAM Engine有助于提高阅读操作的速度吗?

时间:2013-07-13 19:12:18

标签: mysql sql innodb myisam

我目前有一些InnoDB Engine的表格。 10-20个连接不断地将数据插入这些表中。我在AWS上使用MySQL RDS实例。度量标准显示大约300写入IOPS(计数/秒)。但是,INSERT操作会锁定表,如果有人想要执行SELECT COUNT(*) FROM table;之类的查询,那么在MySQL缓存结果之前,它可能会花费几个小时的时间。

我不是DBA,我对DB的了解非常有限。所以问题是我是否会切换到MyISAM引擎是否有助于缩短READ操作的时间?

3 个答案:

答案 0 :(得分:1)

我认为你应该坚持使用当前的设置。假设InnoDB在插入行时不会锁定表,因为它使用MVCC技术。另一方面,MyISAM在插入新行时锁定整个表。

所以,如果你有很多写作,你应该坚持使用InnoDB。

答案 1 :(得分:1)

Innodb总的来说是一个更好的整体引擎。有一些基准测试将myiasm中的读取操作放在innodb之前。但是,如果您的网站足够大,可以注意到这种性能差异,那么无论如何都应该使用innodb,因为所有其他效率。 Innodb因为行级锁定而获胜,而不是在备份数据库时在myiasm中锁定表级别。

答案 2 :(得分:1)

没有WHERE的SELECT COUNT(*)是对InnoDB的错误查询,因为它不像MyISAM那样缓存行数。因此,如果您对此特定查询有疑问,则必须在某处缓存计数 - 例如,在统计信息表中。

删除此特定类型的查询后,您可以谈论InnoDB与MyISAM读取性能。通常写入不会阻止InnoDB中的读取 - 为此使用MVCC。然而,InnoDB性能非常依赖于您为缓冲池设置了多少RAM。

InnoDB和MyISAM在存储数据方面有很大不同。您可以随时优化其中一个,了解差异可以帮助您设计应用程序。通常,你可以在InnoDB表中获得与MyISAM一样好的读取性能 - 你可以使用count而不使用where子句,并且你总是应该有一个合适的where子句索引,因为在InnoDB表扫描中将比在MyISAM中慢。 / p>