2015-09-21 3 views
0

Каждую неделю мне нужно загрузить 50K ~ 200K строк записей из необработанного CSV-файла в мою систему.Проверьте, существуют ли записи для вставки или обновления. В MYSQL

В настоящее время я решил загрузить CVS в таблицу темп (пуст после процесса), затем запустите мою Хранимую процедуру, чтобы манипулировать данными в разных соответствующих таблицах в моей системе. Если записи уже существуют, будет запущено update запрос (80% записей в CSV уже находятся в моей системной таблице), если не существует Вставьте записей.

Проблема, с которой я столкнулся сейчас, - это таблицы, которые растут до нескольких миллионов записей, прибл. 5-6 миллионов за каждую таблицу. "Select Exist" кажется очень медленным тоже, после этого я меняю на левые таблицы объединения партиями также медленно. Даже я только что загрузил 5 тыс. Записей, это может занять около нескольких часов, чтобы закончить процесс Сохраненной процедуры.

Любые хорошие и более быстрые решения для обработки огромных записей при сравнении таблиц для определения записей вставки/обновления?

Спасибо!

Джек

+0

Начните с индексирования таблиц. Затем вы можете посмотреть несколько онлайн-статей для управления и масштабирования больших баз данных. –

+0

Раньше я индексировал. В настоящее время он начинает плохо работать, когда таблицы растут до миллионов строк. – Jack

+0

Посмотрите на инструкцию MySQL «REPLACE INTO», это может быть решение, которое вы ищете: https://dev.mysql.com/doc/refman/5.0/en/replace.html –

ответ

0

ли следующий процесс, который позволит сократить ваше время

Первая попытка обновить запись и проверьте количество строк, если количество затронутых строк = 0, то вставить запись.

Но убедитесь, что каждый раз, когда вам нужно изменить modified_Date, если modified_Date не существует в таблице, вам нужно добавить это, потому что, если все данные одинаковы в новой и старой записи, тогда он создаст новый запрос только потому, что нет изменение в записи таблицы, чтобы оно вернулось.

+0

Хммм ... это тоже хорошая идея. Позволяет мне понять !!! Спасибо Митул !!! – Jack

0

Медленные ответы MySQL почти всегда являются проблемой неправильной индексации или неправильного использования.

Если вы используете ключи или/и указатель правильно, то INSERT ... ON DUPLICATE KEY UPDATE ... должен работать.

Постарайтесь работать только с существующим индексом/ключом. Проверьте свои заявления с помощью EXPLAIN SELECT.

IMHO Ваша предварительная обработка на основе tmp-таблицы в порядке.

Смежные вопросы