2

I'm currently have a few tables with InnoDB Engine. 10-20 connections are constantly inserts data into those tables. I use MySQL RDS instance on AWS. Metric shows about 300 Write IOPS (counts/second). However, INSERT operations lock the table, and if someone want to perform a query like SELECT COUNT(*) FROM table; it could literally take a few hours for the first time before MySQL cache the result.

I'm not a DBA and my knowledge about DB are very limited. So the question is if I'll switch to MyISAM Engine will it help to improve the time of READ operations?

4

3 回答 3

1

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

于 2013-07-13T20:14:34.447 回答
1

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

删除这种特定类型的查询后,您可以讨论 InnoDB 与 MyISAM 的读取性能。通常写入不会阻止 InnoDB 中的读取 - 为此使用 MVCC。然而,InnoDB 性能很大程度上取决于您为缓冲池设置了多少 RAM。

InnoDB 和 MyISAM 存储数据的方式非常不同。您始终可以针对其中之一进行优化,并且了解其中的差异可以帮助您设计应用程序。一般来说,你可以在 InnoDB 表中获得与 MyISAM 一样好的读取性能——你可以使用不带 where 子句的 count,并且你总是应该为 where 子句设置合适的索引,因为在 InnoDB 表扫描中会比在 MyISAM 中慢。

于 2013-07-14T16:25:40.063 回答
1

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

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

于 2013-07-13T20:07:43.173 回答