2

这是我的桌子

CREATE TABLE IF NOT EXISTS `download` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `date` datetime NOT NULL,
  `keyword` varchar(255) NOT NULL,
  `subkeyword` varchar(255) NOT NULL,
  `desc` varchar(255) NOT NULL,
  `no_file` varchar(255) NOT NULL,
  `url` varchar(256) NOT NULL,
  `visit` int(11) NOT NULL,
  `stat` tinyint(1) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `keyword` (`keyword`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=161087206 ;

有 161,012,173 条记录和 58.7 GiB 表大小

我创建了tmp具有相同结构但具有唯一关键字的新表,以避免重复记录而不是我使用的:

insert IGNORE into tmp select * from download;

已经2个小时了,还没有结束。有没有最快的方法?

附言。我使用 8 核至强和 8GB 内存

谢谢你

4

1 回答 1

0

您可以尝试先进行插入而不忽略,然后更改以删除重复项:

ALTER IGNORE TABLE tmp ADD UNIQUE (`keyword`)

ALTER声明可能仍需要一些时间。

编辑哎呀...省略了“TABLE”关键字。我也不确定,但keyword可能会被保留,所以我添加了反引号。此外,在某些版本的 InnoDB 中显然存在一个不允许您执行此操作的错误。

另外:是的,ALTER 语句可能需要很长时间,但 INSERT IGNORE 语句应该做同样的事情。我的回答是建议一些可能更快但不能保证的东西。

于 2012-11-30T15:01:24.107 回答