我有一个带有 ~50'000'000 条记录的 MyISAM 表(网络爬虫的任务):
CREATE TABLE `tasks2` (
`id` int(11) NOT NULL auto_increment,
`url` varchar(760) character set latin1 NOT NULL,
`state` varchar(10) collate utf8_bin default NULL,
`links_depth` int(11) NOT NULL,
`sites_depth` int(11) NOT NULL,
`error_text` text character set latin1,
`parent` int(11) default NULL,
`seed` int(11) NOT NULL,
`random` int(11) NOT NULL default '0',
PRIMARY KEY (`id`),
UNIQUE KEY `URL_UNIQUE` (`url`),
KEY `next_random_task` (`state`,`random`)
) ENGINE=MyISAM AUTO_INCREMENT=61211954 DEFAULT CHARSET=utf8 COLLATE=utf8_bin
每隔几秒就会发生一次以下操作之一(但不会同时发生):
- INSERT ... VALUES (500 行) - 插入新任务
- UPDATE ... WHERE id IN(最多 10 个 id) - 更新批量任务的状态
- SELECT ... WHERE (by next_random_task index) - 加载一批任务进行处理
我的问题是插入和更新非常慢 - 运行几十秒,有时超过一分钟。不过,选择很快。为什么会发生这种情况以及如何提高性能?