2

2 つの異なるデータベースのテーブルから別のデータベースにデータをインポートする PHP スクリプトを作成しています。私はサンプルデータで問題なく動作していますが、今では最終的な用途に似たデータを使用するようになりました.テーブルごとに2,500万以上のレコードがあり、毎日成長しています. 明らかに、効率は少し心配です。

これが現在の仕組みです。キーの整合性を維持するために、いくつかのフィールドを追加して、テーブル構造をコピーします。

other1.someTable (field1, field2, field3) Pk = [field1, field2]
other2.someTable (field1, field2, field3) Pk = [field1, field2]
mydb.someTable   (id, source, field1, field2, field3)
    Pk = id, Unique key = [source, field1, field2]

そして、ここにSQLがあります。ON DUPLICATE KEY UPDATEこのインポートは定期的に実行し、「mydb」のデータを更新する必要があるため、ステートメントがあります。ありがたいことに、「他の」データベースからレコードが削除されることはありません (と思います!)。

INSERT INTO mydb.someTable (source, field1, field2, field3)
SELECT 1, field1, field2, field3 FROM other1.someTable
ON DUPLICATE KEY UPDATE field1 = field1, field2 = field2, field3 = field3;

INSERT INTO mydb.someTable (source, field1, field2, field3)
SELECT 2, field1, field2, field3 FROM other2.someTable;
ON DUPLICATE KEY UPDATE field1 = field1, field2 = field2, field3 = field3;

私の質問はこれです:これはこれを行うための最良の方法ですか? 何百万ものレコードがあり、テーブルごとに合計で何ギガバイトものデータになることを考えると、より高速な他の方法はありますか?

4

3 に答える 3

2

IDが重複していませんか?または、存在する場合、常に 2 番目のデータベースのデータで上書きしますか?

また、DB1 / DB2 から取得したデータを 3rd データベースに挿入 / 更新する前に、何らかの処理を行いますか?

最初の質問に対する答えが「はい」で、3 番目の質問に対する答えが「いいえ」である場合は、LOAD DATA INFILEを使用する方がはるかに高速になる可能性があります。DB1 と DB2 からデータを選択し、順番にロードします。

于 2009-11-19T01:51:12.987 に答える
0

On Duplicate Key Update では、フィールド 1 とフィールド 2 はキーであり、一致しているため、更新する必要はありません。

もう 1 つの質問は、1 が field3 を 1 つの値に設定し、次に 2 がそれを別の値に設定することを気にしますか? そしてまた明日と明後日に、これは何か知っておくべきことですか?

于 2009-11-19T01:52:19.210 に答える
0

連合テーブルの使用を検討しましたか?

于 2009-11-19T16:07:18.883 に答える