Какие издержки связаны с хранимыми процедурами .NET, выполняемыми на Sql Server? - PullRequest
2 голосов
/ 24 апреля 2009

Конечно, существует некоторый тип переключения контекста, маршалинга, сериализации и т. Д., Который имеет место, когда вы решаете написать хранимую процедуру в NET против T / SQL.

Существуют ли какие-либо неопровержимые факты об этих издержках, связанных с принятием решения об использовании .NET против T / SQL для хранимых процедур?

Какие факторы вы используете для принятия решения?

Для меня разработка в C # на 1000% быстрее, чем в T / SQL, из-за моей кривой обучения, но когда это усиление не компенсирует снижение производительности (если оно вообще есть)?

Ответы [ 3 ]

2 голосов
/ 24 апреля 2009

Я бы сказал, что это зависит.

Некоторые вещи, которые вы найдете, используя процедуры CLR, лучше

  1. Использование собственных объектов .NET - файловая система, сеть и т. Д.
  2. Использование функций, не предлагаемых TQL или не столь хороших, как .NET, например, регулярные выражения

Для других вы обнаружите, что процедуры TSQL лучше с точки зрения простоты использования или скорости выполнения

  1. Использование логики на основе множеств (где abc в def или abc не в ghi)
  2. Операции CRUD
2 голосов
/ 24 апреля 2009

Служебная нагрузка не имеет отношения к переключению, маршалингу и т. Д., Если только ... ваших данных еще нет в базе данных.

Тем не менее, я склонен делать почти не хранимые процедуры настолько, насколько это возможно с T-SQL - завернутые в ORM.

Действительно, это ответ на этот вопрос. Изучите Entity Framework, NHibernate, Linq To SQL и т. Д. Прекратите писать хранимые процессы (теперь я могу услышать отрицательные голоса) и сделайте это с C #.

РЕДАКТИРОВАТЬ: Добавлено больше информации Хранимые процедуры трудно тестировать (они привязаны к данным), они не дают преимуществ по скорости по сравнению с динамическим SQL и на самом деле не являются более безопасными. Тем не менее, для таких вещей, как сортировка и фильтрация, реляционная база данных более эффективна, чем C #.

Но, если вам нужно использовать хранимые процедуры (и есть времена), используйте TSQL в максимально возможной степени. Если у вас есть существенное количество логики, которую нужно выполнить, которая не установлена ​​на основе, тогда используйте C #.

Один раз, когда я сделал это, я добавил дополнительную обработку данных в мою базу данных. Компания, в которой я работал, использовала 5-4-4 фискальных календаря на неделю. Это было почти невозможно сделать в SQL. Поэтому я использовал C # для этого.

1 голос
/ 24 апреля 2009

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

Как правило, сохраненные параметры будут лучше масштабироваться; но это может быть не так в вашем случае, или это не может быть важным фактором для вас.

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