Tag: myisam

mysql – MyISAM versus InnoDB

The Question : 865 people think this question is useful Closed. This question is opinion-based. It is not currently accepting answers. Want to improve this question? Update the question so it can be answered with facts and citations by editing this post. Closed 2 years ago. Improve this question I’m working on a projects which

mysql – MyISAM与InnoDB

我正在研究涉及大量数据库写入的项目,我会说(70%的插入和30%的读取)。该比率还包括我认为是一次读取和一次写入的更新。读取可能很脏(例如,在读取时我不需要100%准确的信息)。 有问题的任务将是每小时进行超过100万次数据库事务。 我在网上看到了很多关于MyISAM和InnoDB之间差异的东西,对于我将用于此任务的特定数据库/表,MyISAM似乎是我的明显选择。从我似乎正在阅读的内容来看,如果需要事务处理,InnoDB很好,因为支持行级锁定。 有没有人有这种负载(或更高)的经验?MyISAM是走的路吗? 答案 我在表格中简要地讨论过这个问题,这样你就可以得出结论是否与InnoDB或MyISAM一起使用。 以下是您应该在哪种情况下使用哪个数据库存储引擎的小概述: MyISAM InnoDB -------------------------------------------------- -------------- 必需的全文搜索是5.6.4 -------------------------------------------------- -------------- 需要交易是的 -------------------------------------------------- -------------- 经常选择查询是 -------------------------------------------------- -------------- 频繁插入,更新,删除是 -------------------------------------------------- -------------- 行锁定(单表上的多处理)是 -------------------------------------------------- -------------- 关系基础设计是的 总结一下: 经常阅读,几乎没有写作=> MyISAM MySQL中的全文搜索<= 5.5 => MyISAM 在所有其他情况下,InnoDB通常是最好的方式。 我不是数据库专家,我不会从经验中说话。然而: MyISAM表使用表级锁定。根据您的流量估算值,您每秒接近200次写入。使用MyISAM,其中只有一个可以随时进行。您必须确保您的硬件能够跟上这些事务以避免被超出,即单个查询可能不会超过5毫秒。 这对我来说,你需要一个支持行级锁定的存储引擎,即InnoDB。 另一方面,编写一些简单的脚本来模拟每个存储引擎的负载应该是相当简单的,然后比较结果。 人们经常谈论性能,读取与写入,外键等等,但在我看来,存储引擎还有另外一个必备功能: 原子更新。 尝试这个: 对MyISAM表发出UPDATE需要5秒钟。 当UPDATE正在进行时,比如说2.5秒,按Ctrl-C中断它。 观察桌子上的效果。更新了多少行?有多少人没有更新?表格是否可读,或者当您按下Ctrl-C时它是否已损坏? 针对InnoDB表尝试使用UPDATE进行相同的实验,中断正在进行的查询。 观察InnoDB表。 零行已更新。InnoDB已确保您拥有原子更新,如果无法提交完整更新,则会回滚整个更改。此外,该表没有损坏。即使您使用killall -9 mysqld模拟崩溃,这也有效。 当然,性能是可取的,但不会丢失数据应该胜过它。 我使用MySQL工作的大容量系统,我已经尝试了MyISAM和InnoDB。 我发现MyISAM中的表级锁定导致了我们工作负载的严重性能问题,这听起来与您的相似。不幸的是,我还发现InnoDB下的表现也比我希望的要糟糕。 最后,我通过对数据进行分段来解决争用问题,使得插入进入“热”表并选择从不查询热表。 这也允许删除(数据是时间敏感的,我们只保留X天价值)发生在“陈旧”表上,这些表再次未被选择查询触及。InnoDB似乎在批量删除方面表现不佳,因此如果您计划清除数据,您可能希望以旧数据处于陈旧表中的方式对其进行构造,这样可以简单地删除而不是在其上运行删除。 当然我不知道你的应用程序是什么,但希望这能让你深入了解MyISAM和InnoDB的一些问题。 游戏有点晚……但这是几个月前写的一篇相当全面的文章,详细介绍了MYISAM和InnoDB之间的主要区别。拿一杯茶(也许是一块饼干),享受吧。