"MyISAM与InnoDB的比较[已关闭]"

22 浏览
0 Comments

"MyISAM与InnoDB的比较[已关闭]"

已关闭。这个问题基于个人意见。暂时无法接受回答。


想改善这个问题吗?通过编辑这篇文章,更新问题以便用事实和引证来回答。

改善这个问题

我正在开发一个需要大量数据库写入的项目,我会说是(70%的插入和30%的读取)。这个比例也包含我认为需要一次读取和一次写入的更新。这些读取可以不准确(例如,读取时我不需要100%准确的信息)。

所涉及的任务将执行100万个数据库事务/小时。

我在网上阅读了很多关于MyISAM和InnoDB之间差异的文章,对于我将要使用的特定数据库/表来说,MyISAM似乎是明显的选择。从我所读到的内容来看,如果需要事务,则InnoDB很好,因为支持行级锁定。

有人有这种负载(或更高)的经验吗? MyISAM是正确的选择吗?

admin 更改状态以发布 2023年5月22日
0
0 Comments

我不是数据库专家,也没有亲身经历。不过:

MyISAM表使用表级锁定。根据您的流量估计,您每秒需要大约200个写入。使用MyISAM,这些中只有一个可以同时进行。您必须确保您的硬件能够跟得上这些事务,以避免被淹没,即单个查询不能超过5ms。

这使我想到您需要支持行级锁定的存储引擎,即InnoDB。

另一方面,编写几个简单的脚本以使用每个存储引擎模拟负载,然后比较结果应该相对容易。

0
0 Comments

我已经在一个表格中简要讨论了这个问题,所以你可以得出是否要选择InnoDBMyISAM的结论。

这里有一个小概述,告诉你在哪种情况下应该使用哪个数据库存储引擎:

                                                 MyISAM   InnoDB
----------------------------------------------------------------
需要全文搜索                                     是        5.6.4
----------------------------------------------------------------
需要事务                                                     是
----------------------------------------------------------------
经常进行查询操作                                   是        
----------------------------------------------------------------
经常进行插入、更新或删除等操作                                   是
----------------------------------------------------------------
行锁(在单个表上进行多处理)                                        是
----------------------------------------------------------------
基于关系的设计                                                      是

总结

  • 几乎在所有情况下,InnoDB是最好的选择
  • 但是,如果经常读取而几乎不写入,则使用MyISAM
  • 在MySQL <= 5.5中进行全文搜索,使用MyISAM
0