首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql db引擎何时使用

mysql db引擎何时使用
EN

Stack Overflow用户
提问于 2015-03-14 09:37:23
回答 2查看 116关注 0票数 0

我试图找出哪个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。我们很少加入表transactionstransactions_logs来获取统计数据。

5)我们有一个表pages,其中我们通常只选择数据,比如每秒1行。为此,我们选择了MyISAM,并打开了MySQL缓存。

问题:

(A)我们有另一个表,每100000秒插入1次,但是每秒有许多选择/更新查询?这应该是哪种类型的?对于这种类型,我们目前正在使用MyISAM。我们从它中读取数据,修改它,然后更新它,每1-2秒进行一次。MyISAM是这方面的最佳选择吗?

你认为我们应该对所有的表都使用InnoDB吗?从MySQL 5.6开始,我就读到过InnoDB是默认的表类型,并且它可能被优化了很多。

EN

回答 2

Stack Overflow用户

发布于 2015-03-14 11:55:05

从根本上讲,我使用MyISAM和InnoDB之间的以下两个差异来选择在特定场景中使用哪一个:

  • InnoDB支持事务,MyISAM不支持事务。
  • InnoDB有行级锁定,MyISAM有表级锁定.

(资料来源:MySQL 5.7参考手册)

我的经验法则是,当有高数量的MyISAM查询和低数量的update/insert查询时使用update/insert。无论何时写性能或数据完整性都很重要,我将使用InnoDB。

虽然以上这些都是有用的起点,但是每个数据库和每个应用程序都是不同的。您的硬件和软件设置的具体细节将最终决定哪个引擎选择最好。有疑问的时候,测试!

然而,我要说的是,根据所提供的数字,并且假设‘现代’服务器硬件,您还没有接近MySQL的性能限制,所以这两个引擎都足够了。

票数 1
EN

Stack Overflow用户

发布于 2015-03-14 11:07:09

MyISAM非常适用于只读加载,并且可以永远加载写入和读取。它通过在写操作时锁定整个表来处理并发。这会使它在写重物时非常慢。

INNODB有点复杂,增加了一些必须适当配置的配置选项。这增加了对行级锁定的支持,这对于被添加的行来说是很好的,在理想情况下,它更新的时间少于1次(给出足够的时间来读/写)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29047446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档