8.5.5 Загрузка больших данных в таблицы InnoDB
Эти советы по производительности дополняют общие рекомендации по быстрым вставкам в разделе 8.2.4.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. Подробности см. в разделе 14.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=latin1; 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. Однако этот подход требует перестроения таблицы, что может повлиять на производительность. -
© 2025 Oracle
Licensed under the GPLv2 License.