将现有表从MyISAM移到InnoDB,哪一个更快?

时间:2013-03-25 16:47:54

标签: mysql relational-database innodb myisam storage-engines

数据库最多有25-30个表,所有表都是 MyISAM 。这些表中的大多数彼此相关,这意味着许多查询使用ID上的连接并检索数据。

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

我还解释了InnoDB的好处:

  1. 由于我们总是在密钥上连接多个表并且它们是相关的,因此最好使用外键并使用关系数据库来避免孤立行。我发现其中一个大表中的 10-15k 孤立行,并且必须手动删除它们。

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

  3. 现在我从老板得到的回应是我需要证明InnoDB的运行速度比MyISAM快。我的问题是,通过消除孤立行,不会超过2件事情提高应用程序本身的速度吗?

    一般来说MyISAM比InnoDB更快?

    注意:使用MySQL 5.5

1 个答案:

答案 0 :(得分:5)

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

当然,说服老板的最好方法就是证明这一点。制作大表的副本并放在测试数据库中。在MyISAM中创建一个版本的数据,在InnoDB中创建一个。然后使用与当前数据库读/写活动相近的负载混合对其运行负载测试。如果它更好,请找出自己。

刚刚更新了您对5.5的评论。使用5.5,使用InnoDB是没有道理的。 MyISAM引擎在过去几年中基本上没有任何改进,InnoDB的开发工作也在不断发展。 InnoDB是未来的MySQL引擎。