这是我的表格
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内存
谢谢
您可以尝试先进行插入而不忽略,然后更改以删除重复项:
ALTER IGNORE TABLE tmp ADD UNIQUE (`keyword`)
ALTER
声明可能仍需要一些时间。
编辑哎呀...省略了"表"关键字。我也不确定,但keyword
可能会被保留,所以我添加了反引号。此外,某些版本的InnoDB中显然存在一个错误,不允许您执行此操作。
另外:是的,ALTER 语句可能需要很长时间,但 INSERT IGNORE 语句应该做同样的事情。我的回答是关于可能更快但不能保证的东西的建议。