【发布时间】: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
我们正在开发一个使用 Oracle 9i 作为后端的 Visual Studio.NET 2008 应用程序。存储过程的使用是否会比内联 SQL 更快?这是与我的合作程序员的一场辩论。
我们正在使用 Oracle 的 ODP.NET(Oracle Data Provider for .NET)。
谢谢。
【问题讨论】:
标签: sql oracle stored-procedures odp.net
虽然我很想回答“不”或“我不这么认为”,但要想知道这个问题的答案,唯一真正的方法是自己去衡量一下。使用像 JetBrains dotTrace 这样的分析器和 TOAD 自己的分析器来找出答案。
所有其他答案都是推测性的。
【讨论】:
应该是的。当您将内联 SQL 发送到数据库时,引擎必须对其进行解析并执行。存储过程在创建时被解析(和编译)。所以至少你获得了解析时间。
【讨论】:
我希望存储过程在几乎所有情况下都更快。
但这主要取决于您的代码。
例如,如果您从数据库中获取结果集,然后使用该数据执行其他查询,那么您最终会在网络流量中产生大量开销。如果您忘记对请求使用单个连接,则尤其如此。
然后,使用单个存储过程返回聚合数据可能会更有效(当然,如果可能的话)。
【讨论】:
如果您构建存储过程(PL/SQL 包)以减少在数据库和客户端之间传输的数据的方式,它会更快。
【讨论】:
Jon Limjap 说:“所有其他答案都是推测性的。”
这句话很有道理。有这么多因素:数据库服务器是如何设置的?网络速度/可靠性如何? SQL 怎么样? PL/SQL 怎么样?如果我愿意,我可以编写非常慢的 SQL 和/或 PL/SQL(并且在过去的项目中无意中拥有!)。所以如果可以的话,两个都试试。
【讨论】: