问题:数百个相同的(模式)表。其中一些有一些需要删除的重复数据。我通常的策略是:
walk list of tables - for each do
create temp table with unique key on all fields
insert ignore select * from old table
truncate original table
insert select * back into original table
drop or clean temp table
对于较小的表,这很好用。不幸的是,我正在清理的表通常有数以亿计的记录,所以我的工作和客户端连接在我运行它时超时。(因为有数百个这样的表,我使用 Perl 来遍历列表并清理每个表。这是超时发生的地方)。
我正在研究的一些选项:
mysqldump - 很快,但我不知道如何执行后续的“插入忽略”步骤
into outfile / load infile - 也很快,但我从远程主机运行,'into outfile' 在 mysql 服务器上创建所有文件。很难清理。
在 100K 记录块中进行插入/选择 - 这可以避免数据库超时,但速度很慢。
我确信有更好的方法。建议?