我试图找出哪个MySQL表引擎最适合我们的每个表和需求。
具有多个读取(选择查询)的表是MyISAM。具有许多写入(插入/更新查询)的表是InnoDB。这是我们使用的唯一两种类型,但是现在我们有了不同的场景,我们不知道哪个DB引擎是最好的。
1)我们有一个表users,我们经常更新/选择,例如每秒1行进行SELECT,每1秒更新1行,但是插入很少,比如每300秒插入1行。为此,我们选择了MyISAM。
2)我们有一个表users_data,我们在表users中插入数据的频率和在表users中的插入频率一样,就像每300秒一次一样,但是我们不太频繁地更新这个表,但是我们每1秒从它读取一次。为此,我们选择了MyISAM
3)我们有一个表transactions,我们经常插入数据,就像每4-5秒插入1行数据一样,我们每20-30秒从中选择一个大包(我们经常根据用户on从这个表中选择许多和)。为此,我们选择了MyISAM。
4)我们有一个表transactions_logs,其中存储id (与transactions表相同)、商号、电子邮件,我们经常插入数据,比如每4-5秒插入一行,但我们很少读到。为此,我们选择了InnoDB。我们很少加入表transactions和transactions_logs来获取统计数据。
5)我们有一个表pages,其中我们通常只选择数据,比如每秒1行。为此,我们选择了MyISAM,并打开了MySQL缓存。
问题:
(A)我们有另一个表,每100000秒插入1次,但是每秒有许多选择/更新查询?这应该是哪种类型的?对于这种类型,我们目前正在使用MyISAM。我们从它中读取数据,修改它,然后更新它,每1-2秒进行一次。MyISAM是这方面的最佳选择吗?
你认为我们应该对所有的表都使用InnoDB吗?从MySQL 5.6开始,我就读到过InnoDB是默认的表类型,并且它可能被优化了很多。
发布于 2015-03-14 11:55:05
从根本上讲,我使用MyISAM和InnoDB之间的以下两个差异来选择在特定场景中使用哪一个:
(资料来源:MySQL 5.7参考手册)
我的经验法则是,当有高数量的MyISAM查询和低数量的update/insert查询时使用update/insert。无论何时写性能或数据完整性都很重要,我将使用InnoDB。
虽然以上这些都是有用的起点,但是每个数据库和每个应用程序都是不同的。您的硬件和软件设置的具体细节将最终决定哪个引擎选择最好。有疑问的时候,测试!
然而,我要说的是,根据所提供的数字,并且假设‘现代’服务器硬件,您还没有接近MySQL的性能限制,所以这两个引擎都足够了。
发布于 2015-03-14 11:07:09
MyISAM非常适用于只读加载,并且可以永远加载写入和读取。它通过在写操作时锁定整个表来处理并发。这会使它在写重物时非常慢。
INNODB有点复杂,增加了一些必须适当配置的配置选项。这增加了对行级锁定的支持,这对于被添加的行来说是很好的,在理想情况下,它更新的时间少于1次(给出足够的时间来读/写)。
https://stackoverflow.com/questions/29047446
复制相似问题