我有一张约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
每隔几秒钟就会发生一次以下操作(但从不同时):
我的问题是插入和更新非常慢 - 运行大约几十秒,有时超过一分钟。但是选择很快。为什么会发生这种情况以及如何提高绩效?
答案 0 :(得分:2)
在常规硬件上约50M是一个不错的数字。
请在sf上查看this问题(即使它是为InoDB编写的,MyISAM也有类似的参数)
之后你应该开始
的循环答案 1 :(得分:1)
EXPLAIN
针对整个表的示例UPDATE
,以确保使用主键索引。
考虑将state
更改为TINYINT
或ENUM
以使其索引更小。 (ENUM
实际上可能不会这样做。)
您需要url
上的唯一键吗?这会减慢插入速度。