4

リレーショナル データベースを 1 か月間修正しようとしていますが、効率的な解決策が見つかりません。

Hier は私の問題です: 私は 5 億 3400 万行の Relational Db を持っており、多くの外部キー (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 クエリ

export tables(dump) --> 重複を検索 --> 親テーブルにクエリを送信

メモリは必要ありませんが、テーブルは非常に大きく、5 つのクエリには 1 秒かかり、5,000 万回の重複には数日、数か月、数年かかります

3: ON DUPLICATE UPDATE KEY:重複キーを格納するために 1 つの列 'duplicate' を追加し、key を除くすべての列を一意のキーとして定義し、
insert.... on duplicate update concat(duplicate,';',VALUES(key)) .

ただし、一部のテーブルには複数のキーがあり、24 列を一意のインデックスとメモリの問題として再度定義する必要がある場合があります

私の問題を説明できれば幸いです。何か考えはありますか?

4

1 に答える 1