ребят есть 5 таблиц. Одна временная в неё первоначально заносятся данные, другие основные в них нужно перенести информацию в зависимости от того, что гружу. вот собственно вопрос: необходимо из temp_table перенести все данные в main_table, учитывая дубли. если попался дубликат - обновить все данные в строке.
структура таблиц одинаковая:
id int(11) not null autoincrement,
xml_id varchar(128) not null,
name text not null,
quantity int(11) not null,
price double(5,2) not null
p.s заранее извиняюсь за оформление, пишу с телефона - неудобно.
p.p.s данных очень много ( 50-500к строк)
replace into не подходит. пробовал. допустим загрузил в чистую таблицу 50к записей. пробую ещё раз выгрузить. поставил строке xml_id флаг unique . получается так что id начинает отсчёт с 50001 .
ну у REPLACE алгоритм какой, если есть элемент с этим ID, мы его апдейтим, если нет добавляем. В вашей задаче не нужно добавлять новый элемент если его нет в основной таблице?
Тогда можно попробовать второй мой вариант.
INSERT INTO ... FROM SELECT ... ON DUBLICATE KEY UPDATE id = LAST_INSERT_ID() + 1
или его разновидности, но я не уверен в его поддержке для данной задачи.
Ну или MAX(id)+1, но это уже менее производительно.
В крайнем случае, если одним запросом не выйдет.
Большая часть производительности теряется на перестройку индексов при поочередной загрузке, можно отключить их, команду погуглить.
т.е. Делается:
1)Отключаем индексы (не удаляем а именно отключаем)
2 делаем все операции
3) включаем индексы