Являются ли .NET MySqlTransactions пакетными/буферизованными локально?

Допустим, у вас есть миллион строк для вставки в удаленную базу данных.

Для повышения производительности вы сделали следующее:

  1. Повторное использование одного соединения MySQL
  2. Создание одного подготовленного MySqlCommand, который вы будете повторно использовать для всех своих вставок.
  3. Использование MySqlTransaction для предотвращения автоматической фиксации после каждой вставки и вызов transaction.Commit() только после завершения работы с пакетом.

Вопрос достаточно прост: MySQL Connector.NET автоматически выполняет пакетную обработку транзакций в этих обстоятельствах, или вы должны отдельно объединить несколько строк в один INSERT INTO foo(bar) VALUES (..), (..), (..), (..), ...; и выполнить несколько из них в своей транзакции?

В какой момент лучше использовать MySqlBulkLoader вместо этого?


person Mahmoud Al-Qudsi    schedule 28.03.2013    source источник
comment
Я не знаю этого факта, но я не думаю, что такое поведение существует в соединителе MySql, потому что никто не ожидал, что он будет там. Хотя это и имеет смысл, это не то, о чем думает большинство разработчиков, выполняя несколько вызовов command.ExecuteNonQuery. Хороший вопрос, однако!   -  person tucaz    schedule 28.03.2013
comment
@tucaz разумная логика, прекрасное рассуждение. Я бы реализовал это, если бы я писал адаптер, но это только я. Я знаю, что это открытый исходный код, и мне, вероятно, следует просто скачать его и посмотреть самому..... ворчать   -  person Mahmoud Al-Qudsi    schedule 28.03.2013


Ответы (1)


Ответ: нет, не являются. Даже при использовании скомпилированных операторов каждый раз, когда вы добавляете параметр, данные отправляются по сети, а затем происходит более удаленная связь во время выполнения.

person Mahmoud Al-Qudsi    schedule 08.05.2013