SQL Server: почему функция CLR работает быстрее, чем хранимая процедура CLR?

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

Также я прочитал о сравнении функции CLR с хранимой процедурой CLR и узнал, что функция CLR быстрее, чем хранимая процедура CLR. Может кто-нибудь объяснить мне, в техническом смысле, почему функция CLR быстрее?

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

1 ответ

Я не думаю, что скалярная пользовательская функция SQLCLR (UDF) обязательно быстрее, чем хранимая процедура SQLCLR. Я думаю, что это будет зависеть от того, что это за операция и как она используется. Одним из преимуществ, которыми могут воспользоваться некоторые пользовательские функции SQLCLR, является отсутствие доступа к данным (и иногда, хотя и не всегда, если IsDeterministic установлен в true), тогда они могут участвовать в параллельных планах. Это не то, что могут делать пользовательские функции T-SQL. Таким образом, для операций, которые могут быть выполнены в UDF (не все могут быть, некоторые требуют выполнения в хранимой процедуре), которые не делают никакого доступа к данным и которые вызываются повторно в одном запросе, это может обеспечить улучшение производительности по сравнению с хранимыми процедурами, которые нельзя вызывать на основе набора.

Дополнительные сведения о работе с SQLCLR в целом см. В серии статей, которые я пишу, на тему SQL Server Central: Лестница в SQLCLR.

PS Если вы собираетесь заявить, что вы "натолкнулись на дебаты", а затем "прочитали" о какой-то теме, вам действительно следует предоставить ссылки на эти обсуждения и статьи / сообщения, предполагая, что они не находятся на частных форумах или на корпоративном форуме. интрасеть. Это действительно помогает иметь контекст того, что говорится, особенно чтобы убедиться, что вы не просто неправильно поняли / неправильно поняли то, что нашли (и да, это произошло).

Другие вопросы по тегам