Я пишу скрипт 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;
У меня такой вопрос: Является ли это наилучшим из возможных способов сделать это? Существуют ли другие способы, которые могли бы быть более быстрыми, учитывая, что будут миллионы и миллионы записей на общую сумму много гигабайт данные на таблицу?