将数据从一个MySQL数据库导入到另一个数据库的最有效方法
我正在编写一个PHP脚本,它将两个不同数据库中表的数据导入到另一个数据库中。除了现在我已经开始使用更接近它的最终用途的数据:每张表格有2500多万条记录,并且每天都在增长,我已经可以使用示例数据了。显然,效率有点令人担忧。将数据从一个MySQL数据库导入到另一个数据库的最有效方法
以下是当前的工作原理。我复制表结构,增加一对额外的域来维护密钥完整性:
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;
我的问题是这样的:这可能是最好的方式做到这一点?考虑到将会有数百万和数百万条记录,每个表中总共有几千兆字节的数据,是否还有其他方法可能会更快?
您确定没有重复的ID吗?或者,如果有的话,你是否总是用来自第二个数据库的数据覆盖它们?
此外,在将数据插入/更新到第3个数据库之前,您是否会对从DB1/DB2获取的数据执行任何任何处理?
如果第一个问题的答案是“是”,第三个答案是“否”,那么使用LOAD DATA INFILE时可能会更快地使用很多。从DB1和DB2中选择数据并按顺序加载它们。
那么您在重复键更新,有没有需要更新字段1和Field2,因为他们是关键的,并已匹配。
另一个问题是:你介意1套字段3到一个值,然后2台给其他 - 并再次明天,后天 - 是这件事你必须知道发生了什么?
来自“其他”数据库的数据不会相互覆盖,因为有“源”列使其对每个数据库都是唯一的。 – nickf 2009-11-19 02:24:46
你有shell吗?有一个名为mysqldump的MySQL工具。 – powtac 2009-11-19 01:46:01