Вопрос «Не приведет ли написание хранимой процедуры на C# с использованием .net CLR как части SQL Server 2008 моей хранимой процедуры менее эффективной, чем если бы она была написана на T-SQL?» действительно слишком широк, чтобы дать осмысленный ответ. Эффективность сильно зависит не только от того, какие типы операций вы выполняете, но и от того, как вы выполняете эти операции. У вас может быть хранимая процедура CLR, которая должна превосходить эквивалентную процедуру T-SQL, но на самом деле работает хуже из-за плохого кода, и наоборот.
Учитывая общий характер вопроса, я могу сказать, что «в целом» то, что можно сделать в T-SQL (без особой сложности), вероятно, следует делать в T-SQL. Одно возможное исключение может быть для TVF, так как CLR API имеет очень интересную опцию для потоковой передачи результатов обратно (я написал статью для SQL Server Central — требуется бесплатная регистрация — о STVF). Но невозможно узнать наверняка, не имея версий кода CLR и T-SQL и не тестируя обе версии с данными производственного уровня (даже плохо написанный код обычно достаточно хорошо работает с 10 000 строк или меньше).
Таким образом, настоящий вопрос здесь сводится к следующему:
Я знаю C# лучше, чем T-SQL. Что я должен делать?
И в этом случае было бы лучше просто спросить, как решить эту конкретную задачу в T-SQL. Вполне может быть, что есть несложные решения, о которых вы просто еще не знаете, но сможете понять, изучив функцию/технику/и т. д. И вы все равно можете написать эквивалентное решение в SQLCLR. и сравните производительность между ними. Но если нет удовлетворительного ответа для обработки этого в T-SQL, сделайте это в SQLCLR.
При этом 3 года назад я провел исследование производительности SQLCLR и T-SQL и опубликовал результаты на Простой разговор.
person
Solomon Rutzky
schedule
13.07.2014