0

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

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

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

请建议我该怎么办?数据为 960 万条记录 / 3.2GB

还建议如何将数据从 1 个表快速移动到其他表。

4

3 回答 3

1

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

如果您确实将它们分解得更多,从长远来看,您将自取其辱。

于 2012-04-08T08:57:07.947 回答
1

创建一个具有相同结构但对确定行的唯一性的列集具有唯一约束的新表。

然后使用INSERT IGNORE INTO....SELECT FROM将所有行从旧表转移到新表。语法可以在这里找到。

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

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

于 2012-04-08T09:37:26.893 回答
1

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

于 2012-04-08T09:01:04.160 回答