MySQL, лучший способ вставить 1000 строк - PullRequest
2 голосов
/ 18 декабря 2011

У меня есть таблица "item" со следующей структурой: вещь Я бы название и т.д.

Пользователи могут положить предметы из этой таблицы предметов в свой инвентарь. Я храню его в инвентарной таблице так:

inventory
  id
  item_id
  user_id

Можно ли вставить 1000 строк в таблицу инвентаризации? Каков наилучший способ вставить 1000 строк?

Ответы [ 4 ]

2 голосов
/ 18 декабря 2011

MySQL может обрабатывать миллионы записей в одной таблице без каких-либо настроек. С небольшими изменениями он может обрабатывать сотни миллионов (я так и сделал). Так что я бы не волновался об этом.

Для повышения производительности вставки следует использовать пакетные вставки.

insert into table my_table(col1, col2) VALUES (val1_1, val2_1), (val1_2, val2_2);

Хранение записей в файле и использование load data infile дает еще лучшие результаты (лучший в моем случае), но это требует больше усилий.

1 голос
/ 18 декабря 2011

Когда дело доходит до 1000-х, я обычно использую запись в CSV-файл с разделителями канала и использую LOAD DATA INFILE , чтобы быстро его сосать.Записывая на диск, вы избегаете проблем с переполнением вашего строкового буфера, если используемый вами язык имеет ограничения на размер строки.LOAD DATA INFILE оптимизирован для массовой загрузки.

Я сделал это с помощью 1 миллиарда строк (на дешевой 4-летней 32-битной коробке Ubuntu за 400 $ за 4 ГБ)тысяча не проблема.

Добавлено примечание: если вас не волнует назначенное id, и вы просто хотите новый уникальный идентификатор для каждой вставляемой записи, вы можете подумать о настройке AUTO_INCREMENT на id в таблице и позвольте Mysql назначить вам идентификатор.

1 голос
/ 18 декабря 2011

Это нормально, чтобы вставить 1000 строк. Вы должны сделать это как транзакция , чтобы индексы обновлялись одновременно при фиксации.

Вы также можете создать один оператор INSERT для вставки нескольких строк одновременно. (См. Синтаксис INSERT .) Однако мне интересно, насколько целесообразно было бы сделать это для 1000 строк.

Наиболее эффективным было бы, вероятно, использовать ЗАГРУЗИТЬ ИНФИЛЬ ДАННЫХ или ЗАГРУЗИТЬ XML

0 голосов
/ 18 декабря 2011

Это также зависит от того, сколько у вас пользователей, если у вас есть 1 000 000 пользователей, каждый из которых делает 1000 вставок каждые несколько минут, то сервер будет изо всех сил стараться не отставать.С точки зрения mysql он, безусловно, способен обрабатывать такое количество данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...