0

我有 3 个表a b cab 和 c 都通过一个 id 关联a.id = b.id = c.id

我的任务是从 ab 和 c 中选择所有a.date超过 6 个月的行并将它们插入到新的数据库中进行归档。

这是我到目前为止所拥有的:

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

这似乎从表 a 中选择所有超过 6 个月的条目并将它们插入到归档数据库表 a 中。

从表 b 和 c 中查找具有相同 id 的所有行并将它们插入到归档数据库表 b 和 c 中的最佳和最有效的方法是什么?

我有超过 100 万条超过 6 个月的记录,所以我对性能问题感到厌烦。

4

2 回答 2

0

因此,在玩了一段时间之后,这似乎是我发现实际可行的最佳方法:

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

我不确定这是否是最有效的方法,但它可以完成工作

于 2013-03-04T21:57:58.370 回答
0

像您在此处所做的那样插入后,您可以运行以下命令以同样的方式dbArchive.a插入.dbArchive.bdbArchive.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 回答