我正在编写一个 PHP 脚本,它将两个不同数据库中的表中的数据导入另一个数据库中。我已经让它与样本数据一起工作,除了现在我已经开始使用更接近其最终用途的数据:每张表有 25+ 百万条记录,并且每天都在增长。显然,效率是一个问题。
这是它当前的工作方式。我复制了表结构,添加了几个额外的字段来维护密钥的完整性:
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;
我的问题是:这是最好的方法吗?考虑到将有数百万条记录,每个表总共有数 GB 的数据,还有其他方法可能更快吗?