SqlBulkCopy Vs. TVP Vs. Параметр XML Vs. Отдельные вставки для 20-200 вставок? - PullRequest
3 голосов
/ 23 декабря 2011

В ситуациях, когда для .Net Aspx Page или веб-службы требуется примерно 20-200 вставок строк в таблицу, какой из следующих подходов вы бы порекомендовали и почему? Небольшой прирост производительности, скорее всего, будет означать, что я все еще буду использовать метод, который мне наиболее знаком, поэтому, пожалуйста, скажите, не будет ли он иметь большое значение. Будем весьма благодарны за любые общие рекомендации относительно того, когда действительно имеет смысл использовать одно над другим.

  1. Таблица значений параметров
  2. Класс SqlBulkCopy
  3. Параметр XML в хранимой процедуре и с использованием XQuery
  4. Двадцать-двести отдельных сохраненных вызовов Proc

Другие примечания: Объем логической обработки, требуемой для каждой вставки, варьируется, но можно предположить, что мало что потребуется. Меня больше всего интересует, может ли быть значительный выигрыш в производительности / простоте использования / других преимуществах одного из четырех вариантов этих крошечных пакетных вставок, которые будут повторяться десятки или сотни раз в день.

Ответы [ 3 ]

9 голосов
/ 23 декабря 2011

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

I SqlBulkCopy как дополнительная рабочая лошадка дляЗначительно большие объемы данных и для нескольких таблиц.

Параметры XML будут очень интенсивными процессорами, и XML все еще не настолько естественен для SQL Server, как TVP.

Несколько вставок - худший вариант длядальний - 200 соединений, 200 транзакций и т. д. *


Реальный ответ относительно того, какой вариант работает лучше всего, зависит от вашей конкретной ситуации.Вам нужно проверить все подходы и выбрать лучший для вас.

2 голосов
/ 06 января 2012

Это действительно зависит от того, сколько пользователей одновременно получают доступ к этой странице.Если у вас есть только один пользователь, фиксирующий данные, тогда простые вставки будут работать нормально, поскольку вставки, возможно, являются самыми быстрыми операциями в базе данных.Вы можете отправить данные в очередь для последующей обработки, если пользователю не требуется немедленная обратная связь.

2 голосов
/ 23 декабря 2011

Или другой вариант, если ваша практика безопасности допускает прямую вставку таблицы.

    Insert into insertTable with (tablock) (Col1, Col2) 
    values ('1a', '2a), ('1b','2b')  

Вы можете иметь до 1000 значений.Я часто это делаю, и это самая быстрая для необработанных вставок, которые я обнаружил (кроме bcp, но внутри ASP с живой базой данных, которая является грязной).

Если insertTable имеет PK, сортируйте значенияПК для минимизации разделения таблицы.Если в данных имеются большие пробелы, это не сильно поможет, но не может повредить.Для начальной загрузки сортировка на PK огромна.

Поддерживайте индексы на insertTable и оставляйте соответствующий коэффициент заполнения.

С помощью (tablock) повлияет на других пользователей, но я обнаружил, что для предела в 1000 и менее вы настолько быстро, что это оптимально.

Мне также нравится ответ TVP от Одеда.Сортировка и ведение индексов также должны помочь TVP.

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