Быстро вставить 1 000 000 значений в mysql [дубликат]

385
05 июня 2017, 22:46

На данный вопрос уже ответили:

  • Как быстро заполнить таблицу 1 000 000 ТЕСТОВЫХ записей? 1 ответ

Есть такая задача.
БД MySQL в ней одна таблица (int), и нужно заполнить значениями с 1 до 1 000 000. Подключаюсь и работаю с БД через jdbc.

Мне приходит на ум два решения: придумать запрос на формирование такой таблицы и передать его в БД через statement, или можно сделать типа цикла в java и записать значения через цикл.
Допустим:

for(int i=1;i<=1000000;i++){
  // запрос на добавление одного нового значения.
}

Собственно вопрос, как сделать такую вставку быстрее?
В задаче важна скорость. Есть у кого идеи?

Answer 1

Оптимизация: Можно в одном запросе добавлять сразу несколько строк.

DELIMITER ;;
CREATE PROCEDURE dowhile()
BEGIN
  DECLARE v INT DEFAULT 0;
  WHILE v < 20 DO
    INSERT `table_name` VALUES (v+1),(v+2),(v+3),(v+4), /* 50000-4 values */;
    SET v = v + 1;
  END WHILE;
END;;
DELIMITER ;

Выполни сохраненную процедуру

CALL dowhile();
SELECT * FROM `table_name`;

При таком варианте 1 000 000 строк добавятся за 14 секунд. 1000 итерации c 1000 values – 74 секунды. 100 по 10 000 строк – 22 секунды.

Можно в одном запросе все миллион строк добавлять. То есть можно и через JDBC такой запрос послать, ограничение на длину запроса в MySQL 32 МБ вроде.

Неактуальная информация: Создай хранимую процедуру

DELIMITER ;;
CREATE PROCEDURE dowhile()
BEGIN
  DECLARE v1 INT DEFAULT 1;
  WHILE v1 <= 1000000 DO
    INSERT `table_name` VALUES (v1);
    SET v1 = v1 + 1;
  END WHILE;
END;;
DELIMITER ;

Добавление 1000 записей заняло у меня 47 секунд, то есть 1 000 000 записей добавятся за 13 часов.

READ ALSO
URL при работе на локальном сервере(Ajax, Spring)

URL при работе на локальном сервере(Ajax, Spring)

Есть веб-приложение на Spring MVC, клиентская сторона посылает Ajax запросы на сервер

356
Android - socket.io посыл данных всем клиентам в виде byte[]

Android - socket.io посыл данных всем клиентам в виде byte[]

ЗдравствуйтеМоя проблема в том, что я никак не соображу в чем именно может быть проблема

432
Ускорить процесс парсинга

Ускорить процесс парсинга

Как можно изменить код, чтобы скачивание происходило быстрее?

299