Улучшение объемных вставок - PullRequest
0 голосов
/ 14 ноября 2011

У меня есть процесс, который помимо всего прочего должен вести аудит того, что он делает. Этот аудит - ВСТАВКА в таблицу аудита. Я проверил это, и похоже, что этот аудит замедляет процесс (на два порядка).
В таблице аудита есть некоторые индексы. Будет ли хорошей идеей удалить ВСЕ индексы и перестроить их после завершения процесса?

Структура таблицы: id (fk) | текст | id (проиндексированный) | id (проиндексированный) | еще около 10 текстовых полей

У меня есть буфер 50, когда он заполняется, я вставляю его как массивную вставку. Всего я вставляю около 300 тыс. Записей.

1 Ответ

0 голосов
/ 14 ноября 2011

Если вы используете MyISAM, вы можете использовать ALTER TABLE Auditable DISABLE KEYS, а затем снова включить ваши ключи (ALTER TABLE AuditTable ENABLE KEYS) после того, как вы закончите вставку. Однако это отключит только неуникальные ключи.

http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

Эта функция может быть явно активирована для таблицы MyISAM. ALTER TABLE ... DISABLE KEYS говорит MySQL прекратить обновление неуникальных индексов

Если у вас есть большие ключи PK / Unique, отбрасывание ключей и добавление их обратно после импорта, вероятно, будет намного быстрее.

Вы также можете попробовать записать свои записи аудита в плоский файл, а затем импортировать их все сразу, используя LOAD DATA INFILE. Опять же, отключение или сброс ваших ключей до ЗАГРУЗКИ ДАННЫХ значительно ускорит процесс.

...