Как mysql может вставлять миллионы записей быстрее? [закрытый]
Я хотел вставить около миллионов записей в мою базу данных, но он шел очень медленно со скоростью около 40 000 записей/час, я не думаю, что мое оборудование слишком медленно, потому что я видел, что diskio находится под 2 MiB/s. У меня есть много таблиц, разделенных по-разному .sql-файлы. Одна запись также очень проста, одна запись имеет менее 15 столбцов и один столбец имеет менее 30 символов. Я сделал эту работу под archlinux с mysql 5.3. У вас есть какие-нибудь идеи? Или это не скорость? медленно?
1 ответов
Это скорее всего потому, что вы добавляете записи:
INSERT INTO `table1` (`field1`, `field2`) VALUES ("data1", "data2");
INSERT INTO `table1` (`field1`, `field2`) VALUES ("data1", "data2");
INSERT INTO `table1` (`field1`, `field2`) VALUES ("data1", "data2");
INSERT INTO `table1` (`field1`, `field2`) VALUES ("data1", "data2");
INSERT INTO `table1` (`field1`, `field2`) VALUES ("data1", "data2");
отправка нового запроса каждый раз, когда вам нужно INSERT
что-то плохо. Вместо этого просто объедините все эти запросы в один запрос, например.
INSERT INTO `table1` (`field1`, `field2`) VALUES ("data1", "data2"),
("data1", "data2"),
("data1", "data2"),
("data1", "data2"),
("data1", "data2");
вы также можете узнать больше о скорости вставки в MySQL Docs. Он явно describs следующее.
для того чтобы оптимизировать скорость вставки, совместите много небольших деятельностей в одиночную большую деятельность. В идеале вы устанавливаете одно соединение, отправляете данные сразу для многих новых строк и задерживаете все обновления индекса и проверку согласованности до самого конца.
конечно, не объединяйте их все, если сумма огромна. Скажем, у вас есть 1000 строк, которые вам нужно вставить,а затем не делайте этого по одному. Но вы, вероятно, не должны одинаково пытаться иметь все 1000 строк в одном запросе. Вместо этого разбейте его на меньшие размеры.
Если это все-таки очень медленно, то это может быть потому что ваш сервер медленный.
обратите внимание, что вам, конечно, не нужны все эти пробелы в объединенном запросе, то есть просто чтобы получить лучший обзор ответа.