2012-04-08 120 views
0

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

因此,我计划创建不同的表格 - 1个用于电子邮件地址,1个用于移动号码,1个用于地址等等。但是现在如果每张表都有5M记录,那么我的表格变得非常慢。

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

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

另外建议如何快速将数据从一个表格移动到另一个表格。

+0

您正在处理的当前模式是什么? – liquorvicar 2012-04-08 09:00:41

+0

没有模式,所有表都是不同时间的独立记录。每个记录都有姓名,电子邮件,手机,dob等等。但是一个人可能会更改他的电子邮件,手机号码不会;并且在某些情况下名称可能会有点不同 – 2012-04-08 09:10:43

回答

1

创建具有相同的结构,但unique constraint在新表确定行的唯一性的一组列。

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

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

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

+0

听起来不错,会试试这个。我不需要改变旧表格。 – 2012-04-08 10:14:13

1

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

如果你确实把它们分解得更多,那么你会长期在脚下射击。

1

您可以创建一个从12台合并结果的具体view,然后在视图以获得所需的过滤结果查询...

+1

第二个!很多很多的IF条件使它完全符合你的需求! – 2012-04-08 10:21:27

+0

@LoganBibby这些IF条件是什么? – 2012-04-09 10:53:29

+0

那么,它完全取决于你的模式,以及IF条件是什么。但是对于每个领域,你都必须从每个表中提取数据。要做到这一点,如果任何方案存在任何差异,则需要使用IF条件。 – 2012-04-10 14:44:18