EDIT: Чтобы прояснить записи, первоначально были получены из базы данных с плоскими файлами и не находятся в базе данных MySQL.Лучший подход к проверке и внесению записей
В одном из наших существующих программ С целью которых является принимать данные из плоских файлов и вставить их (на основе критериев) в MySQL таблицу:
Open connection to MySQL DB
for record in all_record_of_my_flat_file:
if record contain a certain field:
if record is NOT in sql_table A: // see #1
insert record information into sql_table A and B // see #2
Close connection to MySQL DB
- поле выбора из sql_table A где поле = XXX
- 2 вставки
Я считаю, что управление не чувствую, что это стоит того, чтобы добавить функциональность так, что, когда поле в плоском фи le, он будет вставлен в базу данных. Это характерно для одного клиента (о котором я знаю). Мне тоже показалось странным, что мы используем такой инструмент, чтобы «синхронизировать» данные. Мне было поручено использовать и поддерживать этот сценарий, поэтому я не слышал слишком много о всем процессе. Цель состоит в том, чтобы в первую очередь обрабатывать дополнительные записи, поэтому это не первый раз, когда он используется.
Обычно это делается каждые X месяцев, чтобы синхронизировать все или так, как мне сказали. Мне также сказали, что этот процесс занимает примерно пару дней. Существует (в настоящее время) не более 2,5 миллионов записей (хотя не обязательно все 2,5 м будут вставлены и, скорее всего, намного меньше). Одна из таблиц содержит 10 полей и остальные 5 полей. Существует не так много, чтобы сделать, повторяя записи, поскольку эта часть не может быть изменена в данный момент. Я бы хотел ускорить работу над MySQL.
Я не уверен, что у меня остались какие-то важные детали - сообщите мне! Я также не эксперт по SQL, поэтому не стесняйтесь указывать на очевидное.
Я думал:
- Собираем все вставки в сделку (на данный момент я не знаю, насколько это важно для транзакции, чтобы быть все или ничего, или если это влияет на производительность)
- Использование Вставка X Если не существует у
- LOAD DATA INFILE (но это потребовало бы создать (возможно) большой временный файл)
Я прочитал, что (надеюсь, кто-то может подтвердить), я должен упасть индексы, поэтому они не пересчитываются.
mysql Ver 14.7 Distrib 4.1.22, for sun-solaris2.10 (sparc) using readline 4.3
Существует около 2,5 миллионов записей (но не всех). Я могу использовать скрипт для вызова наших инструментов вместо этого и выполнять синтаксический анализ строк, но я думаю, что он будет таким же (если не медленнее). Я попытаюсь уточнить дополнительные вопросы в вопросе. – nevets1219