Обновление большого количества записей в базе данных MySQL - PullRequest
0 голосов
/ 03 июля 2011

Я думаю о наиболее эффективном способе загрузки и обновления элементов в / в моей базе данных (MySQL). Я работаю с десятками тысяч до сотен предметов.

У меня есть таблица ( table_a ), которая содержит элементы. Каждую ночь я загружаю новые данные, и эти данные хранятся в table_b . Итак, сейчас полночь, я загружу данные в table_b и после загрузки всех данных начну сравнивать данные между table_b и table_a . Если элемент в table_b существует в table_a , поэтому я отредактирую значение 3-4 числа в table_a на table_b . Если этот элемент отсутствует в table_a , то этот элемент я сохраню в table_a .

Таким образом, я обновляю элементы в своей таблице table_a один раз в день. Проблема этого метода в том, что эта процедура очень медленная ... для примерно 20 000 предметов это занимает примерно 25-30 минут. (мое приложение работает на RoR)

Я хотел бы спросить вас - не могли бы вы помочь мне, пожалуйста, лучше и особенно быстрее, чтобы обновить новые записи в таблице ( table_a )? Я буду очень благодарен за это ... заранее спасибо, M.

Ответы [ 2 ]

2 голосов
/ 03 июля 2011

Если все необходимые данные доступны в базе данных, логика не слишком сложна и не подвержена частым изменениям, и производительность является проблемой, миграция логики в один оператор SQL является одним из наиболее очевидных вариантов.

Что-то вроде этого:

INSERT INTO table_a SELECT * FROM table_b ON DUPLICATE KEY UPDATE значение1 = table_b.value1, значение2 = table_b.value2, ....;

0 голосов
/ 03 июля 2011

Два предложения:

  1. Индексы: это должно ускорить поиск.
  2. Хэши: если вы сравниваете длинные строки, лучше создавать хэши, прежде чем сохранять их в базе данных и сравнивать их хэши.
...