Привет, я использую Mysql 5.0.x
Я только что изменил множество таблиц с MyISAM на InnoDB
С таблицами MyISAM для установки нашей базы данных потребовалось около 1 минута. С InnoDB требуется около 15 минут для установки той же базы данных.
Почему InnoDB так долго?
Что я могу сделать, чтобы ускорить процесс?
При установке базы данных выполняются следующие шаги
1) Удаляет схему
2) Создайте схему
3) Создайте таблицы
4) Создайте хранимые процедуры
5) Вставьте данные по умолчанию
6) Вставить данные через хранимую процедуру
Обновлено:
Вставка данных по умолчанию занимает большую часть времени.






15 минут мне не кажутся лишними. В конце концов, это единовременная плата.
Я не уверен, но могу предположить, что часть объяснения заключается в том, что ссылочная целостность не бесплатна. InnoDB должна проделать больше работы, чтобы гарантировать это, поэтому, конечно, это займет больше времени.
Возможно, ваш сценарий нужно изменить, чтобы добавить ограничения после создания таблиц.
Возможно, также рассмотрите возможность использования одной транзакции вместо автоматической фиксации.
@roe - спасибо - единая транзакция ускоряет работу
Как сказал Даффимо, отключите свои ограничения (индексы и внешние / первичные ключи) перед вставкой данных.
Возможно, вам следует восстановить некоторые индексы перед данными, вставленными через хранимую процедуру, если в ней используется много операторов Выбрать
Измените шаг «Вставить данные», чтобы начать транзакцию в начале и зафиксировать ее в конце. Вы получите улучшение, я это гарантирую. (Если у вас много данных, вы можете разбить транзакцию до каждой таблицы.)
Если ваше приложение вообще не использует транзакции, вам следует установить для параметра innodb_flush_log_at_trx_commit значение 2. Это вернет вам большую производительность, потому что у вас почти наверняка будет включен auto_commit, и это генерирует намного больше транзакций, чем настроены параметры InnoDB по умолчанию. для. Этот параметр предотвращает ненужную очистку дисковых буферов при каждой фиксации.
Я согласен с вами по "innodb_flush_log_at_trx_commit" ,. для случаев, когда InnoDB используется в качестве замены MyISAM, тогда это лучший вариант.
И еще. Вставьте данные в таблицу innodb в порядке первичного ключа.
Какой шаг занимает большую часть времени?