InnoDB занимает более часа, чтобы импортировать файл размером 600 МБ, MyISAM за несколько минут

Для этого нужны базы данных. Если вы не хотите тратить много времени на создание большого приложения базы данных, попробуйте sqlite .

56
задан Community 23 May 2017 в 11:54
поделиться

2 ответа

Вы пробовали Советы по массовой загрузке данных из Советы по настройке производительности InnoDB (особенно первый) :

  • При импорте данных в InnoDB убедитесь, что в MySQL не включен режим автоматической фиксации , поскольку для этого требуется сброс журнала на диск для каждого {{1} } вставлять.Чтобы отключить автоматическую фиксацию во время операции импорта, окружите ее операторами SET autocommit и COMMIT :

     SET autocommit = 0; 
     ... Операторы импорта SQL ... 
    COMMIT; 
     

    Если вы используете опцию mysqldump - opt ,вы получаете файлы дампа, которые быстро импортируются в таблицу InnoDB , даже без упаковки их с помощью SET autocommit и COMMIT операторов.

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

     SET unique_checks = 0; 
     ... Операторы импорта SQL ... 
    SET unique_checks = 1; 
     

    Для больших таблиц это значительно экономит дисковый ввод-вывод, потому что InnoDB может использовать свой буфер вставки для записи вторичных индексных записей в пакете. Убедитесь, что данные не содержат повторяющихся ключей .

  • Если у вас есть ограничения FOREIGN KEY в ваших таблицах, вы можете ускорить импорт таблиц, отключив проверку внешнего ключа на время . сеанса импорта:

     SET foreign_key_checks = 0; 
     ... Операторы импорта SQL ... 
    SET foreign_key_checks = 1; 
     

    Для больших таблиц это может сэкономить много дискового ввода-вывода.

ИМО, стоит прочитать всю главу.

131
ответ дан 24 November 2019 в 18:46
поделиться

Вы пытались запустить транзакцию в начале и зафиксировать ее в конце? Из вопроса, который вы связали : «Измените шаг Insert Data, чтобы начать транзакцию в начале и зафиксировать ее в конце. Вы получите улучшение, я гарантирую».

Помните, что InnoDB является транзакционным, а MyISAM - нет. Механизмы транзакций обрабатывают каждый оператор как отдельную транзакцию, если вы явно не контролируете транзакцию. Это может стоить дорого.

5
ответ дан 24 November 2019 в 18:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: