2

我有一张非常简单的桌子

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,并且正在根据工具提示字段的完全匹配进行查询。它托管在具有 1 gig ram 的共享 VPS 上,我可以尝试对 mysql 进行任何调整,但我知道 mysql 调整是一个非常复杂的问题。

示例查询:

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

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

4

3 回答 3

6

最好有您所做的确切查询。但是根据您在此处发布的内容,

您是否打算进行任何全文搜索(阅读 myISAM)?由于 innodb 执行行级锁定,而不是 myISAM 执行表级锁定,因此 innodb 适合您的要求。使用 innodb 引擎尝试以下操作-

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

在适当的地方提供链接。

为了完整起见检查这个 -为什么在 MySIAM 上使用 InnoDB

于 2012-09-25T03:06:54.860 回答
1

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

我的建议是转到 5.5 和 innodb。

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

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

于 2012-09-25T03:08:35.320 回答
0

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

于 2013-12-14T03:12:35.050 回答