8.2.4.1 Оптимизация инструкций INSERT
Для оптимизации скорости вставки объедините многочисленные мелкие операции в одну большую. В идеале, вы создаете одно соединение, отправляете данные для многих новых строк сразу и откладываете все обновления индексов и проверки целостности до самого конца.
Время, требуемое для вставки строки, определяется следующими факторами, где числа указывают приблизительные пропорции:
Подключение: (3)
Отправка запроса на сервер: (2)
Разбор запроса: (2)
Вставка строки: (1 × размер строки)
Вставка индексов: (1 × количество индексов)
Закрытие: (1)
Это не учитывает начальную накладную стоимость открытия таблиц, которая выполняется один раз для каждого одновременно выполняющегося запроса.
Размер таблицы замедляет вставку индексов на log N, предполагая индексы B-дерева.
Вы можете использовать следующие методы для ускорения вставок:
Если вы вставляете много строк от одного клиента одновременно, используйте инструкции
INSERTс несколькимиVALUESсписками для вставки нескольких строк за раз. Это значительно быстрее (в некоторых случаях во много раз быстрее), чем использование отдельных инструкцийINSERTдля каждой строки. Если вы добавляете данные в непустую таблицу, вы можете настроить переменнуюbulk_insert_buffer_sizeдля ещё более быстрого внедрения данных. См. Раздел 5.1.7, «Переменные системы сервера».При загрузке таблицы из текстового файла используйте
LOAD DATA. Обычно это в 20 раз быстрее, чем использование инструкцийINSERT. См. Раздел 13.2.6, «Инструкция LOAD DATA».Воспользуйтесь тем, что столбцы имеют значения по умолчанию. Вставляйте значения явно только тогда, когда вставляемое значение отличается от значения по умолчанию. Это уменьшает разбор, который должен выполнить MySQL, и повышает скорость вставки.
См. Раздел 8.5.5, «Массовая загрузка данных для таблиц InnoDB» за советами, специфичными для таблиц
InnoDB.См. Раздел 8.6.2, «Массовая загрузка данных для таблиц MyISAM» за советами, специфичными для таблиц
MyISAM.
© 2025 Oracle
Licensed under the GPLv2 License.