База данных или плоский файл для 600К записей? - PullRequest
2 голосов
/ 27 июня 2009

Я пишу приложение на C #, которое должно вставлять около 600 тыс. Записей в базу данных в определенный момент времени.

Это очень простые записи: всего 3 длинных.

Я использую params для настройки команды, а затем перебираю данные в памяти для выполнения вставок, присваиваю значения параметрам команды в каждом цикле и выполняю command.ExecuteNonQuery ()

На SqlServer требуется около 50 секунд, и на MySql он работает медленнее, тогда как вставка тех же данных в плоский файл занимает всего несколько миллисекунд.

Я что-то не так делаю или база данных просто слишком медленная?

Ответы [ 12 ]

0 голосов
/ 27 июня 2009

Если вам не требуется много одновременных пользователей, попробуйте использовать MS-Jet, то есть «Microsoft Access» в качестве вашей СУБД. Производительность MSJet может быть примерно в 10 раз быстрее, чем у SqlServer. Кстати, вставка 600k записей всего за 50 секунд (12k / sec) очень быстро для SqlServer.

0 голосов
/ 27 июня 2009

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

string commandText = "insert into x ( y, z) values ( 1, 2 );\r\n"
commandText += "insert into x ( y, z) values ( 2, 3 );"

command.Text = commandText;
command.ExecuteNonQuery();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...