Передача параметров Vs с табличными параметрами Vs XML в SQL 2008 из .Net Application - PullRequest
9 голосов
/ 23 декабря 2009

Поскольку мы работаем над проектом asp .net, существует три способа обновления данных в базе данных, когда требуется обновление / вставка нескольких строк

Давайте предположим, что нам нужно обновить детали обучения сотрудников (это может быть 1,3,5 или 10 записей)

Способ обновления данных

  1. Передать значение в качестве параметра (традиционный подход), если имеется 10 записей, то требуется 10 поездок туда и обратно

  2. Передайте данные как xml и запишите логику в вашей хранимой процедуре, чтобы получить эти данные из xml и обновить таблицу (требуется только одна передача туда и обратно)

  3. Использовать табличные параметры (требуется только одна поездка туда и обратно)

Примечание: данные доступны в виде списка, поэтому мне нужно преобразовать их в xml или любой другой формат, если мне нужно передать.

Нет. мест во всем приложении, нам нужно обновить данные в большом количестве (или несколько записей)

Мне просто нужны ваши предложения, чтобы

  1. Какой метод будет быстрее (пожалуйста, укажите, есть ли другие накладные расходы)

  2. Управляемость или возможность тестирования при любом подходе

  3. Любое другое узкое место или проблема с любым из подходов (проблема сериализации / десериализации или ограничение размера передачи данных)

  4. Любой другой метод, который вы предлагаете для тех же операций

Спасибо

Ответы [ 2 ]

8 голосов
/ 23 декабря 2009

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

Оба других подхода либо построчны, что по своей природе медленнее, либо требуют немалых усилий на стороне SQL Server; обычно это не только не очень весело, но и более подвержено ошибкам и обычно менее производительно, чем простое объединение двух таблиц.

Это как раз тот сценарий, для которого TVP был представлен - чтобы решить проблему «строка за строкой» или «возиться с XML». Я полагаю, что у Microsoft есть веская причина представить это, и если они это сделают, вам обязательно стоит попробовать и посмотреть, работает ли она.

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

3 голосов
/ 30 октября 2010

Если вы используете TVP, вы можете использовать оператор слияния для управления вставкой / обновлением / удалением. (Классная новая функция SQL2008).

Единственное ограничение TVP, которое я видел, это ограничение в 1000 строк. Так как это не проблема с xml или построчно.

Я реализовал построчное решение и TVP для импорта данных, который я делал (тысячи строк). TVP выиграл руки вниз (минуты до секунд). Поэтому я бы посоветовал сделать и то и другое - он также даст вам метрики, чтобы рассказать боссу, насколько вы круты, заставляя вещи работать быстрее!

Вещи, которые вы должны рассмотреть; Каков процессор для преобразования данных из строки в строку в TVP или XML? Это основано на ваших данных. (Собирается задействовать больше циклов или сериализацию)

Проверьте параллельность - я видел примеры, когда параметры таблицы будут работать только на одном ядре !! - Таким образом, в тесте увеличение скорости, которое вы видите, может не отразиться на жизни.

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