组合表(9M记录)并删除重复项

时间:2012-04-08 08:52:52

标签: mysql

我有10个表,每个人有0.5 + M个记录(总共9M记录)。每个表中的结构非常相似。现在我想删除每个表中和表中的重复项,或者说我想查看所有表中的人员以及实际拥有的唯一记录数。 但问题是数据量巨大。

所以我计划创建不同的表 - 1表示电子邮件地址,1表示移动号码,1表示地址等等。但是现在如果每个表有5M记录,那么我的表变得很慢。

1解决方案是我按照出生日期的月份创建表格,将导致12个表格,然后我将能够对每个表格中的数据进行排序。

请建议我该怎么办?数据为9.6M记录/3.2GB

还建议如何快速地将数据从1个表移动到另一个表。

3 个答案:

答案 0 :(得分:1)

听起来你有数据库设计问题。即使是一个3.2gb的数据集也可以足够快地运行...优化数据库结构并使用适当的索引,缓存等将比分割成更多的表要好得多。您希望尽可能少地运行查询,并尽可能简单地查询。

如果你确实将它们分解得更多,那么从长远来看,你将会在脚下射击。

答案 1 :(得分:1)

您可以创建一个特定的view来组合12个表中的结果,然后在视图上查询以获得所需的过滤结果......

答案 2 :(得分:1)

创建一个具有相同结构的新表,但在确定行唯一性的列集上使用unique constraint

然后使用INSERT IGNORE INTO .... SELECT FROM将旧表中的所有行传输到新表。语法可以找到here

然后截断旧表并使用INSERT INTO .... SELECT FROM将行传输回原始表。

您可能希望为原始表添加唯一约束,以防止首先创建重复项。