2

一个数据库已经有多达 25-30 个表并且都是MyISAM。这些表中的大多数都相互关联,这意味着许多查询使用 ID 上的连接并检索数据。

其中一个表包含7-10 百万条记录,如果我想执行搜索或更新甚至检索所有数据,它会变得很慢。现在我向我的老板提出了一个解决方案,说将表转换为 InnoDB 可能会提供更好的性能。

我还解释了 InnoDB 的好处:

  1. 由于我们无论如何都在键上连接多个表并且它们是相关的,因此最好使用外键并拥有可以避免Orphan Rows的关系数据库。我在其中一张大表中发现了大约10-15k孤立行,不得不手动删除它们。

  2. 支持事务,我们不时执行大更新,如果其中一个失败,我们必须用备份的表替换整个表并再次运行更新以确保所有查询都已执行。使用 InnoDB,如果查询 2 失败,我们可以恢复查询 1 的任何更改。

现在我从老板那里得到的回应是我需要证明 InnoDB 会比 MyISAM 运行得更快。我的问题是,以上两件事不会通过消除孤立行来提高应用程序本身的速度吗?

一般来说,MyISAM 比 InnoDB 快吗?

注意:使用 MySQL 5.5

4

1 回答 1

5

您还应该向您的老板提及,对于具有读/写负载的大型表,您从 InnoDB 获得的最大好处可能是 - 您获得了行级锁定而不是表级锁定。在您看到很多等待释放表锁的情况下,这对应用程序来说可能是一个巨大的性能优势。

当然,说服老板的最好方法是证明这一点。复制您的大表并放置在测试数据库中。在 MyISAM 中制作一个版本的数据,在 InnoDB 中制作一个版本。然后使用与当前数据库读/写活动近似的负载组合对其进行负载测试。自己找出是否更好。

刚刚更新了您在 5.5 上的评论。在 5.5 中,使用 InnoDB 很容易。MyISAM 引擎在过去几年中基本上没有任何改进,开发工作一直围绕 InnoDB。InnoDB 是未来首选的 MySQL 引擎。

于 2013-03-25T16:56:13.077 回答