我有一张很简单的桌子
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上,有1gig的ram,我会尝试对mysql进行任何调整,但我知道mysql的调整是一个相当复杂的问题。
示例查询:
select * from largecache where `tooltip` = "Cm8IuIyq9QMSBwgEFS0iGWAd30SUNR2EHJ0nHYYCY-odxZ6okR0pEnPgHWzQbvIiCwgBFXZCAwAYCCAiMAk4_gNAAEgPUBBg_gNqJQoMCAAQvKHZ5oCAgIA6EhUIrcC1xggSBwgEFUn1i18wCTgAQAEY2ojJgQxQAlgA"
我确实安装了apc,但没有memcached
最佳答案
最好有你所做的准确的查询。但是根据你在这里发布的信息-
你打算做任何全文搜索(阅读myisam)?因为innodb做行级锁定,而myisam做表级锁定,innodb的外观适合您的需求。使用innodb引擎尝试以下操作-
将索引放在tooltip
字段上。
从innodb config尝试disable transaction management。虽然这更多的是写而不是读。
尝试increase the cache size for innodb。所有这些数据库引擎都是内存的吸盘,只需向它们投放更多内存就可以了&突然间它们表现得很好。
最后,我不能在结束这篇文章时不提memcached。这是一个分布式缓存管理模块,它与mysql完美集成。这可以显著提高您的读取操作。
在适当的地方提供链接。
为了完整性起见,请检查此项-Why use InnoDB over MySIAM