首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该使用MyISAM还是InnoDB (或其他东西)?

我应该使用MyISAM还是InnoDB (或其他东西)?
EN

Stack Overflow用户
提问于 2010-12-17 08:20:02
回答 2查看 562关注 0票数 2

我有一个在线游戏,这是PHP和MySQL为基础(PHP 5.2.9和MySQL 5.0.91)。最近,我遇到了一些问题,在删除表中数千行旧数据时,整个网站有时会在特定时间冻结。我还遇到了一些问题,当查询必须等待我认为是表锁的时候,会发生一些奇怪的事情,并且游戏不能像预期的那样运行。

我所有的表都是MyISAM的,它每秒运行900多个查询。在整个数据库(~150个表)上,88%的查询是读的,只有12%是写的,但有一些表接近50/50,并且每秒从不同的客户端多次读取和写入大量数据(这是一个多人游戏)。这些表还可以存储1M-5M行。

我知道MyISAM的读取速度应该更快,但是InnoDB不必在写入时锁定整个表。我已经在这里和其他网站上浏览了一大堆主题,但我仍然不确定如何解决这些问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-17 08:25:55

MyISAM最大的问题是它对UPDATE和DELETE命令使用表级锁定,所以如果您要从数据库中删除一条记录,那么在该查询运行时,所有其他的update或delete都将阻塞。

InnoDB使用行级锁定,因此只有正在更新的记录才会阻塞,原因很明显。

InnoDB还有很多有用的特性,比如对事务和外键约束的支持,这使得它成为我和其他开发人员的首选引擎。

就读取速度而言,InnoDB存储按主键排序的记录,这使得检索按PK搜索的记录(如SELECT foo FROM bar WHERE id = baz;)的速度更快。MyISAM或多或少地按照记录被添加到数据库的顺序来存储记录,这意味着如果您主要是按添加记录的日期进行搜索,那么它可以更快,例如,像金融跟踪这样的事情,您可能想要获取某一天发生的所有交易。

Wikipedia详细介绍了这两个引擎之间的许多主要区别,但足以说明的是,在99%的情况下,您可能希望使用InnoDB。

我能想到的唯一一种情况是,如果你需要对全文搜索的支持,MyISAM会有一个明显的胜利。MyISAM支持FTS,但InnoDB不支持。即使这样,您最好使用第三方系统,比如Sphinx,而不是使用MyISAM。

票数 8
EN

Stack Overflow用户

发布于 2010-12-17 08:43:36

如果您有任何类型的复杂数据模型,并且您被迫使用MySQL或其众多分支之一,那么请使用支持外键引用的事务性存储引擎。否则,您将不得不重新发明数据完整性“轮子”,这并不有趣,而且容易出错(特别是当您发现数据到处都存在完整性问题,并且您缺少适当的信息来将其组合在一起时。

如果您能够做到这一点,我建议您使用像PostgreSQL这样的工具,因为这样的健壮性特性是内置的。如果您的应用程序增长到所需的容量,您仍然可以在服务器之间平衡负载。

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

https://stackoverflow.com/questions/4466670

复制
相关文章

相似问题

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