gpt4 book ai didi

mysql 数据库引擎何时使用

转载 作者:行者123 更新时间:2023-11-29 12:20:49 24 4
gpt4 key购买 nike

我正在尝试找出最适合我们每个表和要求的 MySQL 表引擎。

具有大量读取(SELECT 查询)的表是 MyISAM。具有大量写入(INSERT/UPDATE 查询)的表是 InnoDB。这是我们唯一使用的两种类型,但现在我们有不同的场景,我们不知道哪种数据库引擎最好。

1)我们有一个表users,我们经常更新/选择,例如每秒 1 行用于选择,每 1 秒用于更新 1 行,但插入很少,例如每 1 行300秒。为此,我们选择了MyISAM

2)我们有一个表users_data,我们在表users中插入数据的频率与在表users中插入数据的频率一样,例如每300秒一次,但我们不更新该表太频繁了,但我们每 1 秒读取一次。为此,我们选择了MyISAM

3)我们有一个表transactions,我们经常在其中插入数据,例如每4-5秒插入1行,并且我们每20-30秒从中选择大包(我们进行许多SUM)通常根据用户 ID 从该表中获取)。为此,我们选择了MyISAM

4)我们有一个表transactions_logs,其中存储id(与transactions表相同)、商家名称、电子邮件,并且我们经常插入数据,例如每 4-5 秒 1 行,但我们很少读到这个。为此,我们选择了InnoDB。我们很少连接表 transactionstransactions_logs 进行统计。

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

问题:

a) 我们有另一个表,每 100000 秒有 1 个 INSERT,但每秒有很多 SELECT/UPDATE 查询?这应该是什么类型?对于这种类型,我们现在使用 MyISAM。我们从中读取数据,修改它,然后更新它,每 1-2 秒执行一次。 MyISAM 是最好的选择吗?

b)您认为我们应该对所有表使用 InnoDB 吗?我读到,从 MySQL 5.6 开始,InnoDB 是默认的表类型,并且可能进行了很多优化。

最佳答案

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

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

(来源:MySQL 5.7 Reference Manual)

我的经验法则是,当 select 查询数量较多且 update/insert 查询数量较少时,使用 MyISAM。每当写入性能或数据完整性很重要时,我都会使用 InnoDB。

虽然上述内容作为起点很有用,但每个数据库和每个应用程序都是不同的。您的硬件和软件设置的具体细节将最终决定哪种引擎选择最好。如有疑问,请进行测试!

但是,我要说的是,根据提供的数字,并假设“现代”服务器硬件,您远未接近 MySQL 的性能限制,因此任一引擎都足够了。

关于mysql 数据库引擎何时使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29047446/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com