我有10个表,每个人有0.5 + M个记录(总共9M记录)。每个表中的结构非常相似。现在我想删除每个表中和表中的重复项,或者说我想查看所有表中的人员以及实际拥有的唯一记录数。 但问题是数据量巨大。
所以我计划创建不同的表 - 1表示电子邮件地址,1表示移动号码,1表示地址等等。但是现在如果每个表有5M记录,那么我的表变得很慢。
1解决方案是我按照出生日期的月份创建表格,将导致12个表格,然后我将能够对每个表格中的数据进行排序。
请建议我该怎么办?数据为9.6M记录/3.2GB
还建议如何快速地将数据从1个表移动到另一个表。
答案 0 :(得分:1)
听起来你有数据库设计问题。即使是一个3.2gb的数据集也可以足够快地运行...优化数据库结构并使用适当的索引,缓存等将比分割成更多的表要好得多。您希望尽可能少地运行查询,并尽可能简单地查询。
如果你确实将它们分解得更多,那么从长远来看,你将会在脚下射击。
答案 1 :(得分:1)
您可以创建一个特定的view来组合12个表中的结果,然后在视图上查询以获得所需的过滤结果......
答案 2 :(得分:1)
创建一个具有相同结构的新表,但在确定行唯一性的列集上使用unique constraint。
然后使用INSERT IGNORE INTO
.... SELECT FROM
将旧表中的所有行传输到新表。语法可以找到here。
然后截断旧表并使用INSERT INTO
.... SELECT FROM
将行传输回原始表。
您可能希望为原始表添加唯一约束,以防止首先创建重复项。