我試圖糾正一個月的關係數據庫,但我找不到有效的解決方案。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