我正在编写一个PHP脚本,将两个不同数据库中的表中的数据导入到另一个数据库中。我让它在处理示例数据时可以正常工作,但现在我已经转向使用更接近其最终用途的数据:每个表有2500多万条记录,并且每天都在增长。显然,效率有点令人担忧。
下面是它当前的工作原理。我复制了表结构,添加了几个额外的字段来保持键的完整性:
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;
我的问题是:这是最好的办法吗?有没有其他方法可能更快,考虑到将有数以百万计的记录,每一个表的数据总量为千兆字节?
最佳答案
你确定没有重复的身份证吗?或者,如果有的话,您总是要用第二个数据库中的数据覆盖它们吗?
另外,在将数据插入/更新到第三个数据库之前,您是否对从DB1/DB2获得的数据进行了任何处理?
如果第一个问题的答案是“是”,第三个问题的答案是“否”,那么使用LOAD DATA INFILE可能要快得多。从DB1和DB2中选择数据并按顺序加载它们。
关于mysql - 将数据从一个MySQL数据库导入另一个数据库的最有效方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1760394/