MySQL删除重复比插入IGNORE更快?

时间:2012-11-30 14:54:18

标签: mysql duplicate-removal

这是我的表

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个小时但尚未结束。 有没有最快的方式?

PS。 我使用8核xeon和8GB内存

谢谢

1 个答案:

答案 0 :(得分:0)

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

ALTER IGNORE TABLE tmp ADD UNIQUE (`keyword`)

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

编辑糟糕...省略了“TABLE”关键字。另外我不确定,keyword可能会保留,所以我添加了反引号。在InnoDB的某些版本中,显然还有一个错误,它不允许您这样做。

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