Mysql 切换到MyISAM引擎是否有助于提高读取操作的速度?

Mysql 切换到MyISAM引擎是否有助于提高读取操作的速度?,mysql,sql,innodb,myisam,Mysql,Sql,Innodb,Myisam,目前,我有几个带有InnoDB引擎的表。10-20个连接不断向这些表中插入数据。我在AWS上使用MySQL RDS实例。指标显示约300写入IOPS(计数/秒)。但是,INSERT操作会锁定表,如果有人想执行类似于的查询,请从表中选择COUNT(*)

目前,我有几个带有InnoDB引擎的表。10-20个连接不断向这些表中插入数据。我在AWS上使用
MySQL RDS
实例。指标显示约300写入IOPS(计数/秒)。但是,INSERT操作会锁定表,如果有人想执行类似于
的查询,请从表中选择COUNT(*)

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

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


因此,如果您有很多写操作,您应该坚持使用InnoDB。

总体而言,InnoDB是一个更好的引擎。有一些基准测试将myiasm中的读取操作放在innodb前面一点。但是,如果您的站点足够大,以至于可以注意到这种性能差异,那么您无论如何都应该使用innodb,因为它具有所有其他效率。如果在备份数据库时在myiasm中进行表级锁定,则Innodb会单独获胜,因为它不会像MyISAM那样缓存行计数,因此Innodb会单独获胜。

选择COUNT(*)而不选择WHERE is bad query for Innodb。因此,如果您对这个特定的查询有疑问,您必须将计数缓存在某个地方,例如在stats表中

删除此特定类型的查询后,可以讨论InnoDB与MyISAM的读取性能。通常情况下,InnoDB中的写操作不阻止读操作-is为此使用MVCC。不过,InnoDB的性能非常依赖于为缓冲池设置的RAM数量

InnoDB和MyISAM在存储数据的方式上有很大的不同。您总是可以针对其中一个进行优化,了解它们之间的差异可以帮助您设计应用程序。通常,在InnoDB表中,您可以像MyISAM一样具有良好的读取性能—您可以使用count而不使用where子句,并且您应该始终为where子句提供合适的索引,因为在InnoDB表中,扫描将比在MyISAM中慢