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

Rob*_*Rob 2 mysql database myisam innodb relational-database

我有一张非常简单的桌子

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
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢.

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

示例查询:

select * from largecache where `tooltip` = "Cm8IuIyq9QMSBwgEFS0iGWAd30SUNR2EHJ0nHYYCY-odxZ6okR0pEnPgHWzQbvIiCwgBFXZCAwAYCCAiMAk4_gNAAEgPUBBg_gNqJQoMCAAQvKHZ5oCAgIA6EhUIrcC1xggSBwgEFUn1i18wCTgAQAEY2ojJgQxQAlgA"
Run Code Online (Sandbox Code Playgroud)

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

Sri*_*aju 6

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

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

  1. tooltip字段上放置索引.
  2. 尝试从innodb配置禁用事务管理.虽然写入比读取更多.
  3. 尝试增加innodb的缓存大小.所有这些数据库引擎都是内存的吸引力,它就像为它们投入更多内存一样简单并突然表现得很好.
  4. 最后,我不能在没有提及memcached的情况下结束这篇文章.这是一个分布式缓存管理模块,它非常好地与mysql集成.这可以显着提高您的读取操作.

在适当的地方提供链接.

检查这一点是否完整 - 为何使用InnoDB而不是MySIAM