【问题标题】:Are Oracle stored procedures faster than in line SQL for a Microsoft.NET application?对于 Microsoft.NET 应用程序,Oracle 存储过程是否比内联 SQL 更快?
【发布时间】:2010-10-24 03:00:43
【问题描述】:

我们正在开发一个使用 Oracle 9i 作为后端的 Visual Studio.NET 2008 应用程序。存储过程的使用是否会比内联 SQL 更快?这是与我的合作程序员的一场辩论。

我们正在使用 Oracle 的 ODP.NET(Oracle Data Provider for .NET)。

谢谢。

【问题讨论】:

    标签: sql oracle stored-procedures odp.net


    【解决方案1】:

    虽然我很想回答“不”或“我不这么认为”,但要想知道这个问题的答案,唯一真正的方法是自己去衡量一下。使用像 JetBrains dotTrace 这样的分析器和 TOAD 自己的分析器来找出答案。

    所有其他答案都是推测性的。

    【讨论】:

      【解决方案2】:

      应该是的。当您将内联 SQL 发送到数据库时,引擎必须对其进行解析并执行。存储过程在创建时被解析(和编译)。所以至少你获得了解析时间。

      【讨论】:

      • 希望从应用程序提交的 SQL 将使用绑定变量,因此重复执行不会硬解析。说绑定变量在 PL/SQL 中得到提升可能是恰当的,因为它比不绑定它们要容易得多,因此推广了更好的实践。
      【解决方案3】:

      我希望存储过程在几乎所有情况下都更快。
      但这主要取决于您的代码。
      例如,如果您从数据库中获取结果集,然后使用该数据执行其他查询,那么您最终会在网络流量中产生大量开销。如果您忘记对请求使用单个连接,则尤其如此。
      然后,使用单个存储过程返回聚合数据可能会更有效(当然,如果可能的话)。

      【讨论】:

        【解决方案4】:

        如果您构建存储过程(PL/SQL 包)以减少在数据库和客户端之间传输的数据的方式,它会更快。

        【讨论】:

          【解决方案5】:

          Jon Limjap 说:“所有其他答案都是推测性的。”

          这句话很有道理。有这么多因素:数据库服务器是如何设置的?网络速度/可靠性如何? SQL 怎么样? PL/SQL 怎么样?如果我愿意,我可以编写非常慢的 SQL 和/或 PL/SQL(并且在过去的项目中无意中拥有!)。所以如果可以的话,两个都试试。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-08-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-12-09
            • 2010-09-08
            • 2010-09-27
            相关资源
            最近更新 更多