我正在尝试纠正关系数据库一个月,但我找不到有效的解决方案。
希尔是我的问题: 我喜欢534 M行Relational Db和许多foreig键(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,find duplicatelicates,correct the parents array - >导入表
它非常快,但需要80GB内存,这可能是未来的问题
2:PHP脚本,SQL查询
exporrt tables(dump) - >找到重复项 - >将查询发送到父表
不需要记忆,但表格非常大,5个查询需要1秒,50 M重复需要几天,几个月,几年
3:ON DUPLICATE UPDATE KEY 我添加了一列'duplicate'来存储重复键,我将除key之外的所有列定义为唯一键,
insert .... on duplicate update concat(duplicate,';',VALUES(key))。
但是有些表有超过1个键,有时我应该将24列定义为唯一索引和内存问题
我希望我能解释一下我的问题。你有什么想法吗?
答案 0 :(得分:0)
为什么不在列上创建唯一键。只需使用“忽略”关键字即可删除重复记录。
因此,您的查询将如下所示:
ALTER IGNORE TABLE testdb
。table1
添加独特的索引column1
(column1
ASC);