На данный вопрос уже ответили:
Есть такая задача.
БД MySQL в ней одна таблица (int)
, и нужно заполнить значениями с 1
до 1 000 000
.
Подключаюсь и работаю с БД через jdbc
.
Мне приходит на ум два решения: придумать запрос на формирование такой таблицы и передать его в БД через statement
, или можно сделать типа цикла в java
и записать значения через цикл.
Допустим:
for(int i=1;i<=1000000;i++){
// запрос на добавление одного нового значения.
}
Собственно вопрос, как сделать такую вставку быстрее?
В задаче важна скорость. Есть у кого идеи?
Оптимизация: Можно в одном запросе добавлять сразу несколько строк.
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 часов.
Есть веб-приложение на Spring MVC, клиентская сторона посылает Ajax запросы на сервер
ЗдравствуйтеМоя проблема в том, что я никак не соображу в чем именно может быть проблема