1) Судя по тому, что я вижу, дублируются не поля, а записи.
2) Подход неверный - Вы пытаетесь совместить две ненумерованные кучки (параметры $1 и $2), тогда как надо ещё на входе в запрос иметь не отдельные значения, а их пары - т.е. определённому значению из $1 соответствует строго одно определённое значение из $2. И я бы построил эти пары ещё на клиенте, т.е. не [1,2,3] и [a,b,c], а [[1,a],[2,b],[3,c]], и передавал как единый параметр.
Вопросы о производительности либо использовании индексов без полных CREATE TABLE всех таблиц, точного текста запроса и сведений о статистике данных - бессмысленны.
Если Вы убеждены, что использование индекса будет эффективно - то всегда есть FORCE INDEX. Хотя начинать надо с ANALYZE TABLE.
ИБП - по максимальной нагрузке и требуемому времени удержания.
Коммутатор - по требуемому количеству портов, скорости порта и нужным сервисам/протоколам.
Маршрутизатор - по требуемым задачам.
А зачем вообще нужна таблица cheсk_files? какая-то она лишняя... ну и в наличии поля status как-то особого смысла не видать... достаточно manager_id (NULL - не проверялось, <0 - id проверившего с минусом, проверка не пройдена, >0 - id проверившего, проверка пройдена, 0 - требуется повторная проверка).
Какой тогда должен быть полный код запроса в mysql для переноса старой таблицы с данными в структуру новой таблицы и игнором отсутствующих полей?
Если прочитать описание INSERT INTO дальше первой строчки, то выяснится, что можно не звезду ставить, а указывать перечень конкретных полей, причём как в запросе на получение переносимых данных, так и в таблице назначения. И в этом перечне вовсе не обязательно должны присутствовать абсолютно все поля структуры.
В общем случае задача-то нерешаемая... что делать, если одноимённое поле в старой БД строковое, а в новой числовое? что делать, если в поле старой БД содержатся данные, не влезающее в поле в новой БД по размеру? Что делать, если данные в новой структуре будут противоречить целостности (скажем, внешние ключи)?
Вопросов - куча, и далеко не все из них решаемы в автоматическом режиме.
Лучше скажите - а сколько их, тех таблиц? если их в пределах сотни - то написать запросы на вставку быстрее и проще, чем заниматься фигнёй и создавать в общем не самый простой, но практически одноразовый, инструмент.
Формулировка задачи просто-таки воняет денормализацией.
Надо не маяться такой фигнёй, а создать дополнительную таблицу, в которой хранится соответствие между VARCHAR и INT, и сделать на неё внешний ключ по полю типа INT.
nakem, в таком случае Вы описали даже не ползадачи. Что-то постоянно всплывают какие-то условия и дополнительные факты, которых ранее не было. Думаю, Вам надо заново обдумать формулировку вопроса, а затем написать его заново, ничего не упуская (или даже создать новую тему). А свой вариант решения можете смело спрятать под спойлер.
Нет, у них ещё и WHERE различаются. Но если email не может быть NULL, то эти условия абсолютно эквивалентны.