4

我试图纠正一个关系数据库一个月,但我找不到有效的解决方案。

Hier 是我的问题:我有 5.34 亿行关系数据库,其中包含很多外键(30)。

我可以通过插入处理使用 union...group by...havin count(*)=1 的正常重复项,但也有具有不同键的重复项。

例子:

表格1

id | key1 |  value 
1  | 11   |  a1  
2  | 22   |  a1 

表 2

key1 | value 
11   |  a2  
22   |  a2 

Foreign key table1(key1) references table2(key1)

我正在尝试查找,删除重复项,纠正父母。我尝试了3种不同的方法,

1:PHP脚本,数组

导出表(转储)--> array_unique,查找重复项,更正父数组--> 导入表

它相当快,但需要 80GB 内存,这可能是未来的问题

2:PHP脚本,SQL查询

导出表(转储)-> 查找重复项-> 将查询发送到父表

不需要内存,但表非常大,5 个查询需要 1 秒,50 M 重复需要几天、几个月、几年

3:在重复更新键上:我添加了一列“重复”来存储重复键,并将除键之外的所有列定义为唯一键,
插入.... .

但是有些表有超过 1 个键,有时我应该再次将 24 列定义为唯一索引和内存问题

我希望我能解释我的问题。你有什么主意吗 ?

4

1 回答 1

0

为什么不简单地在列上创建一个唯一键。只需使用“忽略”关键字即可删除重复记录。
因此,您的查询将类似于:
ALTER IGNORE TABLE testdbtable1 添加唯一索引column1column1ASC);

于 2015-07-09T13:15:18.487 回答