Является ли пакетная вставка SQL хорошим способом для оптимизации MySQL? - PullRequest
4 голосов
/ 16 августа 2011

Я хотел бы вставить больше строк за один раз в мою таблицу SQL.Я хотел бы узнать, каков наилучший способ сделать это.

1.) Использовать оператор INSERT для каждого фрагмента данных

INSERT INTO message (email, txt) VALUES ('user1@gmail.com', 'txt1');
INSERT INTO message (email, txt) VALUES ('user2@gmail.com', 'txt2');
INSERT INTO message (email, txt) VALUES ('user3@gmail.com', 'txt3');

2) или использовать вместо него массовую вставку?

INSERT INTO message (email, txt) VALUES ('user1@gmail.com', 'txt1'),('user2@gmail.com', 'txt2'),('user3@gmail.com', 'txt3');

Мы говорим о десятках частей данных на одну вставку.Какой из них лучше с точки зрения оптимизации?

btw: txt - столбец типа текста

Спасибо за ваш совет заранее!

Якуб

Ответы [ 3 ]

5 голосов
/ 16 августа 2011

для небольших наборов данных это не имеет большого значения.Тем не менее, в целом объемная вставка будет быстрее.

3 голосов
/ 16 августа 2011

Это зависит от вашего поведения транзакции, а также от задержки на сервере MySQL.

Но в целом да, многострочные вставки хороши.Но будьте осторожны, вы не столкнетесь с максимальным размером пакета (select @@max_allowed_packet).

Многострочная вставка выполняется в одной транзакции, даже если включен автокоммит.Это уменьшает количество синхронизаций в журнале транзакций, что может повысить производительность вставки.Это предполагает innodb_flush_log_at_trx_commit = 1, что должно быть, если вы заботитесь о своих данных!

0 голосов
/ 16 августа 2011

Я думаю, вам стоит взглянуть на SQL Bulk Insert.http://msdn.microsoft.com/en-us/library/ms188365.aspx

При массовой вставке будьте осторожны со своими триггерами.Они должны быть написаны для обработки групповых операций.

Рекомендуемый размер пакета составляет 750 000 строк на пакет.Поэтому при использовании Bulk:

  • Блокировка таблицы
  • Временное отключение индексов
  • Запуск массовой вставки в пакетном режиме
  • В конце:Включить индексы и освободить таблицу.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...