"MyISAM与InnoDB的比较[已关闭]"
"MyISAM与InnoDB的比较[已关闭]"
已关闭。这个问题基于个人意见。暂时无法接受回答。
想改善这个问题吗?通过编辑这篇文章,更新问题以便用事实和引证来回答。
改善这个问题
我正在开发一个需要大量数据库写入的项目,我会说是(70%的插入和30%的读取)。这个比例也包含我认为需要一次读取和一次写入的更新。这些读取可以不准确(例如,读取时我不需要100%准确的信息)。
所涉及的任务将执行100万个数据库事务/小时。
我在网上阅读了很多关于MyISAM和InnoDB之间差异的文章,对于我将要使用的特定数据库/表来说,MyISAM似乎是明显的选择。从我所读到的内容来看,如果需要事务,则InnoDB很好,因为支持行级锁定。
有人有这种负载(或更高)的经验吗? MyISAM是正确的选择吗?
admin 更改状态以发布 2023年5月22日
我不是数据库专家,也没有亲身经历。不过:
MyISAM表使用表级锁定。根据您的流量估计,您每秒需要大约200个写入。使用MyISAM,这些中只有一个可以同时进行。您必须确保您的硬件能够跟得上这些事务,以避免被淹没,即单个查询不能超过5ms。
这使我想到您需要支持行级锁定的存储引擎,即InnoDB。
另一方面,编写几个简单的脚本以使用每个存储引擎模拟负载,然后比较结果应该相对容易。
我已经在一个表格中简要讨论了这个问题,所以你可以得出是否要选择InnoDB或MyISAM的结论。
这里有一个小概述,告诉你在哪种情况下应该使用哪个数据库存储引擎:
MyISAM InnoDB ---------------------------------------------------------------- 需要全文搜索 是 5.6.4 ---------------------------------------------------------------- 需要事务 是 ---------------------------------------------------------------- 经常进行查询操作 是 ---------------------------------------------------------------- 经常进行插入、更新或删除等操作 是 ---------------------------------------------------------------- 行锁(在单个表上进行多处理) 是 ---------------------------------------------------------------- 基于关系的设计 是
总结
- 几乎在所有情况下,InnoDB是最好的选择
- 但是,如果经常读取而几乎不写入,则使用MyISAM
- 在MySQL <= 5.5中进行全文搜索,使用MyISAM