Как вставить объемные данные в таблицу MySQL с asp.net сразу - PullRequest
4 голосов
/ 01 июня 2010

У меня есть требование, что мне нужно прочитать лист Excel, используя asp.net/C#, и вставить все записи в таблицу mysql. Лист Excel состоит из около 2000 строк и 50 столбцов. В настоящее время, после прочтения записей Excel, я вставляю записи одну за другой, используя инструкцию prepare, в таблицу mysql. Но из-за огромных данных это занимает около 70 секунд.

Я также думал о создании нового datarow, присвоении значений каждой ячейке, добавлении результирующего datarow к datatable и, наконец, вызове dataadapter.update (...). Но это кажется сложным, потому что я получил около 50 столбцов и, следовательно, я должен назначить 50 значений для datarow.

Может кто-нибудь предложить, если есть альтернатива для улучшения производительности вставки?

Спасибо

1 Ответ

2 голосов
/ 02 июня 2010

MySQL LOAD DATA INFILE сродни BULK INSERT в MS SQL, и это даст вам лучшую производительность.

Вы можете объединить свой текстовый файл во время циклического перемещения по ячейкам Excel, но для повышения производительности попробуйте экспортировать файл из Excel за один раз - я не уверен, как вам нужно будет уточнить файл экспорта (разделители, и др.)

EDIT:

Или, если у вас недостаточно времени для попытки сделать что-то подобное, по крайней мере, передайте столько строк VALUES в одну инструкцию INSERT, сколько сможете:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9); (также с сайта MySQL.)

Я не знаю, превышает ли 5000 теоретический предел - возможно? - так что просто соберите, может быть, 100 вставок на оператор и затем выполните его.

В любом случае, подход с одной вставкой на команду - это то, что вам стоит.

...