Как эффективно выполнять обновления базы данных SQL Server из моего приложения C # - PullRequest
0 голосов
/ 14 февраля 2012

Я пытаюсь найти лучший способ разработки моего приложения на C #, в котором используются данные из серверной части SQL Server.

Моему приложению периодически приходится обновлять по 55 тыс. Строк по одному из цикла в моем приложении. Перед обновлением необходимо проверить, существует ли запись для обновления.

Если он существует, он обновляет одно поле. Если нет, он выполняет вставку из 4 полей.

Таблица, которая будет обновлена, имеет 600K строк.

  1. Какой самый эффективный способ обработать эти обновления / вставки из моего приложения?
  2. Должен ли я создать словарь данных в c #, загрузить записи 600K и сначала запросить словарь вместо базы данных?
  3. Это более быстрый подход?
  4. Стоит ли использовать хранимую процедуру?
  5. Каков наилучший способ достижения максимальной производительности на основе этого сценария?

Ответы [ 3 ]

1 голос
/ 14 февраля 2012

Вы можете использовать SqlBulkCopy для загрузки во временную таблицу, а затем выполнить слияние с заданием SQL Server.

0 голосов
/ 14 февраля 2012

Что, если вы сделали что-то подобное вместо этого?

Каким-то образом введите эти 55 000 строк данных в базу данных;если они еще не там.(Если вы сейчас получаете эти строки из какого-то запроса, вместо этого организуйте хранение результатов запроса во временной таблице в этой базе данных. (Это может быть подходящим приложением для хранимой процедуры .)

Теперь вы можете выразить операции, которые вам необходимо выполнить, возможно, в виде двух отдельных запросов SQL: один для обновления и один или несколько других для вставки.В первом запросе может использоваться предложение, например «WHERE FOO IN (SELECT BAR FROM @TEMP_TABLE ...)», для определения строк, подлежащих обновлению. Другие могут использовать «WHERE FOO NOT IN (...) "

Это, если быть точным, точно , я бы ожидал, что потребуется использовать хранимую процедуру, потому что, есливы думаете об этом, «сам сервер SQL» является точно подходящей стороной для выполнения работы, потому что он единственный парень, у которого уже есть данных в наличии, что вынамереваться манипулировать. Он один не долженпередать "эти 55 000 строк в любом месте.Идеально подходит.

0 голосов
/ 14 февраля 2012

Вы должны стараться избегать "обновлять 55К строк по очереди из цикла".Это будет очень медленно.

Вместо этого попробуйте найти способ пакетного обновления (n одновременно).Посмотрите на Параметры табличных значений SQL Server как способ отправки набора данных в хранимую процедуру.

Вот статья об обновлении нескольких строк с помощью TVP: http://www.sqlmag.com/article/sql-server-2008/using-table-valued-parameters-to-update-multiple-rows

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