0

私は3つのテーブルa b cabとcを持っており、すべてIDを介して関連付けられていますa.id = b.id = c.id

私の仕事はa.date、6か月以上前のabとcからすべての行を選択し、アーカイブ用に新しいデータベースに挿入することです。

これが私がこれまでに持っているものです:

insert into dbArchive.a select * from db.a where receivedDate < CURRENT_DATE() - INTERVAL 6 MONTH;`

これは、6か月より古いテーブルaからすべてのエントリを選択し、それらをアーカイブデータベーステーブルaに挿入するようです。

同じIDを持つテーブルbとcからすべての行を検索し、それらをアーカイブデータベーステーブルbとcに挿入するための最良かつ最も効率的な方法は何ですか?

6か月以上経過したレコードが100万件以上あるので、パフォーマンスの問題にうんざりしています。

4

2 に答える 2

0

ここで行ったようにに挿入dbArchive.aした後、次のコマンドを実行して、dbArchive.bと同じ方法でに挿入できますdbArchive.c

INSERT INTO dbArchive.b(id, etc..) 
  SELECT db.b.id, etc.. 
  FROM dbArchive.a INNER JOIN db.b ON dbArchive.a.id = db.b.id;
于 2013-02-28T06:28:52.837 に答える
0

したがって、しばらく遊んだ後、これが実際に機能することがわかった最良のアプローチのようです。

INSERT INTO archive.b SELECT * FROM db.b WHERE `id` IN( SELECT `id` FROM archive.a )

これが最も効率的な方法かどうかはわかりませんが、作業は完了します

于 2013-03-04T21:57:58.370 に答える