10.5.5 Загрузка больших данных в таблицы InnoDB
Эти советы по производительности дополняют общие рекомендации по быстрому выполнению операций вставки в Раздел 10.2.5.1, «Оптимизация операторов INSERT».
-
При импорте данных в
InnoDBвыключите режим автокоммита, так как он выполняет сброс журнала на диск для каждой операции вставки. Для отключения автокоммита во время операции импорта заключите её в операторыSET autocommitиCOMMIT:SET autocommit=0;
... SQL import statements ...COMMIT;Опция mysqldump
--optсоздаёт файлы дампов, которые быстро импортируются в таблицуInnoDB, даже без заключения их в операторыSET autocommitиCOMMIT. -
Если у вас есть
UNIQUEограничения на вторичных ключах, вы можете ускорить импорт таблиц, временно отключив проверки уникальности во время сессии импорта:SET unique_checks=0;
... SQL import statements ...SET unique_checks=1;Для больших таблиц это экономит много операций ввода-вывода на диск, потому что
InnoDBможет использовать буфер изменений для записи записей вторичных индексов в пакетном режиме. Убедитесь, что данные не содержат дублирующихся ключей. -
Если у вас есть
FOREIGN KEYограничения в ваших таблицах, вы можете ускорить импорт таблиц, отключив проверки внешних ключей на время сессии импорта:SET foreign_key_checks=0;
... SQL import statements ...SET foreign_key_checks=1;Для больших таблиц это может существенно сэкономить дисковые операции ввода-вывода.
-
Используйте синтаксис многострочной вставки
INSERT, чтобы уменьшить нагрузку на обмен данными между клиентом и сервером, если вам нужно вставить много строк:INSERT INTO yourtable VALUES (1,2), (5,5), ...;
Этот совет справедлив для вставки в любые таблицы, а не только в
InnoDBтаблицы. При выполнении массовых вставок в таблицы с автоинкрементными столбцами установите
innodb_autoinc_lock_modeв 2 (перемежающиеся) вместо 1 (последовательные). Подробности см. в Разделе 17.6.1.6, «Обработка AUTO_INCREMENT в InnoDB».При выполнении массовых вставок быстрее вставлять строки в
PRIMARY KEYпорядке.InnoDBтаблицы используют , что делает относительно быстрым использование данных в порядкеPRIMARY KEY. Выполнение массовых вставок вPRIMARY KEYпорядке особенно важно для таблиц, которые не полностью помещаются в пул буферов.-
Для оптимальной производительности при загрузке данных в
InnoDBFULLTEXTиндекс выполните эти шаги:-
Определите столбец
FTS_DOC_IDво время создания таблицы, типаBIGINT UNSIGNED NOT NULL, с уникальным индексом под названиемFTS_DOC_ID_INDEX. Например:CREATE TABLE t1 ( FTS_DOC_ID BIGINT unsigned NOT NULL AUTO_INCREMENT, title varchar(255) NOT NULL DEFAULT '', text mediumtext NOT NULL, PRIMARY KEY (`FTS_DOC_ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE UNIQUE INDEX FTS_DOC_ID_INDEX on t1(FTS_DOC_ID); Загрузите данные в таблицу.
Создайте индекс
FULLTEXTпосле загрузки данных.
ПримечаниеПри добавлении столбца
FTS_DOC_IDво время создания таблицы убедитесь, что столбецFTS_DOC_IDобновляется при обновлении столбцаFULLTEXTиндексированного столбца, так какFTS_DOC_IDдолжен монотонно увеличиваться при каждой операцииINSERTилиUPDATE. Если вы решите не добавлятьFTS_DOC_IDво время создания таблицы и хотите, чтобыInnoDBуправлял идентификаторами DOC за вас,InnoDBдобавляетFTS_DOC_IDкак скрытый столбец при следующем вызовеCREATE FULLTEXT INDEX. Однако этот подход требует перестроения таблицы, что может повлиять на производительность. -
-
При загрузке данных в новый экземпляр MySQL рассмотрите возможность отключения логирования повторений с помощью синтаксиса
ALTER INSTANCE {ENABLE|DISABLE} INNODB REDO_LOG. Отключение логирования повторений помогает ускорить загрузку данных, избегая записи в журнал повторений. Дополнительная информация — в Разделе «Выключение логирования повторений».ПредупреждениеЭта функция предназначена только для загрузки данных в новый экземпляр MySQL. Не отключайте логирование повторений в рабочей системе. Допускается выключение и перезапуск сервера при отключенном логировании повторений, но непредвиденная остановка сервера при отключенном логировании повторений может привести к потере данных и повреждению экземпляра.
Используйте MySQL Shell для импорта данных. Утилита параллельного импорта таблиц MySQL Shell
util.importTable()обеспечивает быстрый импорт данных в реляционную таблицу MySQL для больших файлов данных. Утилита загрузки дампов MySQL Shellutil.loadDump()также предлагает возможности параллельной загрузки. Смотрите .
© 2025 Oracle
Licensed under the GPLv2 License.