我试图纠正一个月的关系数据库,但我找不到有效的解决方案。Mysql关系数据库与不同的密钥重复
Hier是我的问题: 我有534 M行关联Db与许多外键(30)。
我可以使用union ... group来处理正常的重复... havin count(*)= 1通过插入,但也有不同键的duplciates。
例如:
表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查询
exporrt表(转储) - >找到重复项 - >向父表发送查询
不需要内存,但表格非常大,5个查询需要1秒钟,50 M个副本需要几天,几个月,几年
3:ON DUPLICATE UPDATE KEY:我添加一个列 '重复' 来存储重复的键和予定义的所有列,除了密钥作为唯一的密钥,
插入....上的重复更新的concat(重复,” ;”,VALUES(键))。
但有些表已经超过1个键,有时我应该定义24列作为唯一索引和存储问题再次
我希望我可以解释我的问题。你有什么主意吗 ?
难道你不能在版块1的块?首先对它进行排序,以节省内存,对文件和内存进行合并排序。轻松删除重复项,方便一次,允许边缘情况。然后生成一个导入。 – Orbling
你说得对,其实我可以通过排序数组和导入块来减少内存使用量,但是php并不是很好的垃圾回收机制(一些大文件存在一些愚蠢的内存泄漏),我应该尝试一下,thanx – ekicion
你能澄清一下这是不是你希望定期演出,还是一次性演出?我假设你的“未来可能会有问题”,可能需要重复。 – almcnicoll