Как 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 строк в одном запросе. Вместо этого разбейте его на меньшие размеры.

Если это все-таки очень медленно, то это может быть потому что ваш сервер медленный.

обратите внимание, что вам, конечно, не нужны все эти пробелы в объединенном запросе, то есть просто чтобы получить лучший обзор ответа.