【问题标题】:Stored procedures and functions存储过程和函数
【发布时间】:2010-06-25 10:57:50
【问题描述】:

存储过程和函数有什么区别。

每当有更多的输入、输出参数时,我都会选择存储过程。如果只有一个,我会去功能。

除此之外,如果我使用更多存储过程,是否会出现性能问题?我很担心,因为我的项目中有近 50 个存储过程。

它们在概念上有何不同。

提前致谢!

已编辑:-

当我在存储过程和函数中执行计算时,我发现在存储过程中需要 0.15 秒,而在函数中需要 0.45 秒。

令人惊讶的是,函数比存储过程花费更多时间。功能可能因其可重用性而值得。

内联函数比存储过程执行得更快。我认为,这是因为多选函数不能使用统计信息,这会减慢它们的速度,但内联表值函数可以使用统计信息。

【问题讨论】:

  • 当您进行性能测量时,您学到了什么?请用您实际得到的比较函数和过程的实际结果更新问题。
  • 因为我有很多存储过程,我想检查一下,有这么多存储过程是否存在性能问题?问题已编辑。
  • 当您创建EXAMPLE 函数和EXAMPLE 存储过程并运行这两个EXAMPLE 1000 次以查看性能差异时,您学到了什么?以这两种形式重写所有 50 个是没有有用的。运行两个示例非常非常有帮助。
  • 请用新的事实更新您的问题。请不要将 cmets 添加到您拥有的问题中。您可以更新您的问题,使其更好、更完整。

标签: sql-server stored-procedures


【解决方案1】:

【讨论】:

    【解决方案2】:

    要决定使用两者之一,请记住它们之间的根本区别:存储过程旨在将其输出返回给应用程序。 UDF 返回表变量,而 SPROC 不能返回表变量,尽管它可以创建表。它们之间的另一个显着区别是 UDF 不能更改服务器环境或您的操作系统环境,而 SPROC 可以。在操作上,当 T-SQL 遇到错误时,函数会停止,而 T-SQL 将忽略 SPROC 中的错误并继续执行代码中的下一条语句(前提是您已包含错误处理支持)。您还会发现,虽然 SPROC 可以在 XML FOR 子句中使用,但 UDF 不能。

    如果您有一个操作,例如带有 FROM 子句的查询,需要从一个表或一组表中提取行集,那么函数将是您的合适选择。但是,当您想在应用程序中使用相同的行集时,更好的选择是存储过程。

    关于 UDF 与 SPROC 的性能优势存在相当多的争论。您可能会认为存储过程比 UDF 增加了更多的服务器开销。根据您编写代码的方式和正在处理的数据类型,情况可能并非如此。在重要或耗时的操作中通过尝试这两种方法来为您的数据发送文本总是一个好主意。

    【讨论】:

      猜你喜欢
      • 2013-09-12
      • 2010-09-15
      • 1970-01-01
      • 1970-01-01
      • 2017-04-23
      • 1970-01-01
      • 2011-12-05
      • 2012-11-20
      • 2023-03-22
      相关资源
      最近更新 更多