【发布时间】:2010-06-22 15:33:03
【问题描述】:
我有一个包含约 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(按 next_random_task 索引)- 加载一批任务进行处理
我的问题是插入和更新非常慢 - 运行大约几十秒,有时超过一分钟。不过,选择很快。为什么会发生这种情况以及如何提高性能?
【问题讨论】:
标签: sql mysql optimization myisam