mysql - 非常大的表中的 MyISAM 与 InnoDB

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

示例查询:

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

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

最佳答案

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

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

  1. tooltip 字段上建立索引。
  2. 尝试disable transaction management来自 innodb 配置。尽管这更适合写入而不是读取。
  3. 尝试increase the cache size for innodb .所有这些数据库引擎都是内存吸盘,就像向它们投入更多内存一样简单,突然它们表现良好。
  4. 最后,我不能不提 memcached 就结束这篇文章。 .这是一个分布式缓存管理模块,它与 mysql 完美集成。这可以显着提高您的读取操作。

在适当的地方提供链接。

为了完整起见检查这个 - Why use InnoDB over MySIAM

关于mysql - 非常大的表中的 MyISAM 与 InnoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12575646/

相关文章:

php - 如何使用 php 从远程机器转储和下载 mysql?

php - 单个数据库或多个数据库(用于单个应用程序中的多个用户)

mysql - 将子查询添加到已经很大的查询中

java - Hibernate Natural ID 重复问题

php - 在 PHP 页面上获取 SQL ID 并将其传递给另一个 PHP 页面

mysql - 允许在 mysql 的 where 子句中重复

sql - 甲骨文 SQL : How to read-and-increment a field

c# - 与供应商无关的检索数据库表模式的方法

Python GPS数据捕获

sql - 如何在 sql 中添加外部表中的其他列?