Лучший способ массового вставки и обновления строк в нескольких таблицах в MySQL - PullRequest
2 голосов
/ 18 февраля 2012

У меня как 10 вставок таблицы, и каждая вставка имеет 1 или 1000 или даже 1 lakh записей, а также 4 обновления таблицы.В основном для 1 lakh записей, это будет 10 lakh вставок и 4 lakh обновления, и это может выполняться ежечасно.И главное ограничение заключается в том, что все 10 вставок таблицы и 4 обновления таблицы должны быть в одной транзакции.

Я читал о нескольких способах. Для обработки обновлений я мог бы использовать временную таблицу и сбросить все идентификаторы, которые должны быть обновлены в таблице, а затем использовать соединение с этой временной таблицей из таблицы REAL.к которому обновление должно быть сделано.Но у меня все еще нет эффективного решения для массовой вставки в 10 таблиц.Это жрет много времени.Файл LOAD_DATA является опцией, но это не может быть хорошим выбором, предоставляемым в режиме реального времени. Я мог бы в итоге создать сотни тысяч файлов, поскольку эта операция будет происходить во многих базах данных и областях.Пожалуйста, дайте ваши предложения, чтобы увеличить скорость для этих массовых вставок.

Я планирую изменить "bulk_insert_buffer_size" в mysql и любые другие параметры, которые также будут полезны.Так что любое предложение мне очень помогло бы здесь

1 Ответ

1 голос
/ 18 февраля 2012

Как вы пытаетесь сделать эти массовые вставки? Используете ли вы какой-то клиентский графический интерфейс, например phpMyAdmin? Пожалуйста, попробуйте запустить SQL в командной строке клиента MySQL.

abhay> mysql -u<your_user> -h<your_host> -p < <path_to_your_sql_file> 

Это должно быть достаточно быстро, чтобы сделать все ВСТАВИТЬ и ОБНОВИТЬ. Пожалуйста, не забудьте поставить фактические значения, где это применимо. И файл SQL должен содержать допустимые операторы INSERT и UPDATE.

Несколько предложений:

  1. вы можете попробовать добавить SET foreign_key_checks = 0 в начале вашего файла SQL и SET foreign_key_checks = 1 в конце
  2. если в ваших таблицах много индексов, может помочь временное их отключение. Попробуйте ALTER TABLE...DISABLE KEYS и ALTER TABLE...ENABLE KEYS
  3. Вы можете даже выбрать разделение на несколько файлов SQL, по одному на таблицу

Надеюсь, это поможет!

...