5

我是一名 C# 开发人员,在 T-SQL 中完成了一些基本的数据库工作。但是,我需要编写一个非常复杂的存储过程,远远超出我的 T-SQL 知识。

使用 .net CLR 作为 SQL Server 2008 的一部分在 C# 中编写存储过程会导致存储过程的效率低于使用 T-SQL 编写的存储过程吗?差异(如果有的话)是否显着?为什么?

4

3 回答 3

8

CLRCLR需要一些通信开销(在and之间传递数据SQL Server

经验法则是:

  • 如果您的逻辑主要包括大量数据集的转换,可以使用集合操作执行,那么使用TSQL.

  • 如果您的逻辑主要包括相对少量数据的复杂计算,请使用CLR.

使用集合操作可以做的比看起来要多得多。如果您在此处发布您的要求,我们可能会提供帮助。

于 2010-01-19T23:20:54.307 回答
5

请参阅CLR 集成的性能

本主题讨论了一些可以提高 Microsoft SQL Server 与 Microsoft .NET Framework 公共语言运行时 (CLR) 集成性能的设计选择。

于 2010-01-19T23:16:23.383 回答
0

“使用 .net CLR 作为 SQL Server 2008 的一部分在 C# 中编写存储过程是否会导致我的存储过程的效率低于使用 T-SQL 编写的存储过程?”的问题。实在是太宽泛了,无法给出有意义的答案。效率差异很大,不仅取决于您在做什么类型的操作,还取决于您如何进行这些操作。您可能有一个 CLR 存储过程,它的性能应该优于等效的 T-SQL Proc,但实际上由于编码不佳而性能更差,反之亦然。

鉴于问题的一般性质,我可以说“一般”,可以在 T-SQL 中完成的事情(没有太多复杂性)可能应该在 T-SQL 中完成。一个可能的例外可能是 TVF,因为 CLR API 有一个非常有趣的选项可以将结果流回(我为 SQL Server Central 写了一篇文章——需要免费注册——关于STVF)。但是,如果没有 CLR 和 T-SQL 版本的代码并使用生产级数据进行测试,就无法确定(即使写得不好的代码通常在 10k 或更少的行中表现得足够好)。

所以这里真正的问题归结为:

我对 C# 的了解胜过对 T-SQL 的了解。我该怎么办?

在这种情况下,最好简单地询问如何在 T-SQL 中处理这个特定任务。很可能有一些不复杂的解决方案,您只是碰巧还不知道,但在了解功能/技术/等后能够理解。您仍然可以在 SQLCLR 中编写等效的解决方案并比较它们之间的性能。但是如果在 T-SQL 中处理它没有令人满意的答案,那么在 SQLCLR 中进行。

话虽如此,我在 3 年前做过一项关于 SQLCLR 与 T-SQL 性能的研究,并在Simple-Talk上发布了结果。

于 2014-07-13T19:39:54.117 回答