【发布时间】:2012-04-19 23:53:43
【问题描述】:
问题:数百个相同的(模式)表。其中一些有一些需要删除的重复数据。我通常的策略是:
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 记录块中进行插入/选择 - 这可以避免数据库超时,但速度很慢。
我确信有更好的方法。有什么建议吗?
【问题讨论】:
-
[也许这应该有帮助。] (stackoverflow.com/questions/2385921/…)
-
我会尝试“改变忽略”路线,但我敢打赌,我的连接在完成之前会超时。