SQL Server 2008 CLR против T-SQL: есть ли разница в эффективности / скорости? - PullRequest
5 голосов
/ 20 января 2010

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

Будет ли написание хранимой процедуры на C # с использованием .net CLR в составе SQL Server 2008, моя хранимая процедура будет менее эффективной, чем если бы она была написана на T-SQL? Является ли разница (если есть) существенной? Почему?

Ответы [ 3 ]

8 голосов
/ 20 января 2010

CLR требуются некоторые накладные расходы на связь (для передачи данных между CLR и SQL Server)

Правило:

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

  • Если ваша логика в основном включает сложные вычисления относительно небольших объемов данных, используйтеCLR.

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

5 голосов
/ 20 января 2010

См. Производительность интеграции CLR :

В этой теме обсуждаются некоторые из выбор дизайна, который усиливает производительность Microsoft SQL Server интеграция с Microsoft .NET Рамочная общеязыковая среда выполнения (CLR).

0 голосов
/ 13 июля 2014

Вопрос о том, приведет ли написание хранимой процедуры в C # с использованием .net CLR в составе SQL Server 2008 моя хранимая процедура будет менее эффективной, чем если бы она была написана на T-SQL? действительно слишком широк, чтобы дать значимый ответ. Эффективность сильно варьируется в зависимости не только от того, какие типы операций вы выполняете, но также от того, как вы выполняете эти операции. У вас может быть хранимая процедура CLR, которая должна превосходить аналогичный процесс T-SQL, но на самом деле работает хуже из-за плохого кодирования и наоборот.

Учитывая общую природу вопроса, я могу сказать, что «в общем», то, что можно сделать в T-SQL (без особой сложности), вероятно, следует делать в T-SQL. Одним из возможных исключений может быть TVF, поскольку в CLR API есть очень интересная опция для потоковой передачи результатов обратно (я написал статью для SQL Server Central - требуется бесплатная регистрация - около STVFs ). Но невозможно знать наверняка, не имея как кодов CLR, так и версий T-SQL, и не протестировав их с данными производственного уровня (даже плохо написанный код, как правило, работает достаточно хорошо с 10 тыс. Строк или меньше).

Итак, реальный вопрос здесь сводится к:

Я знаю C # лучше, чем T-SQL. Что мне делать?

И в этом случае лучше всего спросить, как решить эту конкретную задачу в T-SQL. Вполне возможно, что есть несложные решения, о которых вы просто еще не знаете, но сможете понять, узнав об этой функции / методике / и т. Д. И вы все равно можете написать эквивалентное решение в SQLCLR. и сравнить производительность между ними. Но если нет удовлетворительного ответа для обработки этого в T-SQL, то сделайте это в SQLCLR.

При этом я три года назад провел исследование, посвященное SQLCLR и производительности T-SQL, и опубликовал результаты на Simple-Talk .

...