MyISAM与InnoDB在一个非常大的表中

时间:2012-09-25 02:59:50

标签: mysql database relational-database innodb myisam

我有一个非常简单的表

CREATE TABLE IF NOT EXISTS `largecache` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `tooltip` varchar(255) NOT NULL,
  `name` varchar(100) NOT NULL,
  `attributes` text NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `tooltip` (`tooltip`)
) ENGINE=InnoDB

大约有800万个条目几乎完全用于读取。我正在努力确保尽快访问数据。我目前正在使用InnoDB,是否值得切换到MyISAM?我唯一关心的是读取性能。此外,我可以使用任何其他建议加速,因为数据库读取几乎是我应用程序中唯一的瓶颈。

我正在使用MySQL客户端版本:5.1.47

感谢。

[编辑:更多详情] 我正在使用php,我正在查询基于工具提示字段的完全匹配。 它被托管在一个共享的VPS上,有1个内存,我可以尝试对mysql进行任何调整,但我知道mysql调整是一个非常复杂的问题。

示例查询:

select * from largecache where `tooltip` = "Cm8IuIyq9QMSBwgEFS0iGWAd30SUNR2EHJ0nHYYCY-odxZ6okR0pEnPgHWzQbvIiCwgBFXZCAwAYCCAiMAk4_gNAAEgPUBBg_gNqJQoMCAAQvKHZ5oCAgIA6EhUIrcC1xggSBwgEFUn1i18wCTgAQAEY2ojJgQxQAlgA"

我安装了APC,但没有安装memcached

3 个答案:

答案 0 :(得分:6)

拥有您所做的确切查询会很好。但根据你在这里发布的内容 -

您打算进行全文搜索(阅读myISAM)吗?由于innodb执行行级锁定,而不是myISAM,它通过它的外观进行表级锁定,innodb适合您的要求。使用innodb引擎尝试以下内容 -

  1. tooltip字段上添加索引。
  2. 尝试从innodb配置disable transaction management。虽然写入比写入更多。
  3. 尝试increase the cache size for innodb。所有这些数据库引擎都是内存的吸引力,就像在它们上面投入更多内存一样简单。他们突然表现得很好。
  4. 最后,我不能在不提及memcached的情况下结束这篇文章。这是一个分布式缓存管理模块&它非常好地与mysql集成。这可以显着提高您的阅读操作。
  5. 在适当的地方提供链接。

    检查这一点是否完整 - Why use InnoDB over MySIAM

答案 1 :(得分:1)

使用5.1x中的默认innodb,所有条件相同,如果根据您的有限细节进行适当调整,您可能会从myisam获得一点性能提升。

我的建议是去5.5和innodb。

实际上,我们需要查看您的一些查询,以了解您是如何访问它的。你有很多计数(*)吗?

另外,如果你要处理数百万行,1G的RAM可能会有点紧张 - 假设这不是你唯一的表。无论您选择何种类型的表类型,这都可能是您最大的问题。

答案 2 :(得分:0)

似乎在MyISAM方面更多。 作为对“我可以用来加速”的任何其他建议的回应,您可以实施全文搜索。