0

所以,我正在阅读 Ian Abramson 的 Oracle Database 10g 初学者指南(来自使用 mysql),它提到了 PL/SQL 并给出了使用它的所有这些很好的理由,但是我这样做是为了准备重写几个我公司使用的应用程序。

我的首席程序员认为,如果 PL/SQL 在数据库访问方面效率不高,那么所有解析和查询都应该在客户端程序上完成,以将负载从 Oracle 服务器分散开。我认为我们应该划分代码并尝试避免代码重复,PL/SQL 可以帮助我们做到这一点。

问题是,我们实际上并不知道(这本书也没有告诉我们),PL/SQL 中的数据库访问效率如何高于运行在不同机器上的应用程序,该应用程序每次操作进行 3-5 个(较大的)查询。我认为它更有可能运行得更快,因为(据我所知)pl/sql 函数存储并保存它们的执行计划,并且传统的网络开销将减少 3-5 倍(取决于查询的数量)

4

1 回答 1

3

这是一个重要的问题,并且可能会受到您的应用程序设计的影响。一般来说,如果你能用 SQL 做,就用 SQL 做。如果在 SQL 中做不到,请在 PL/SQL 中进行。如果您不能在 PL/SQL 中执行此操作,请使用 Java(在数据库中)执行此操作。如果这不起作用,请在外部客户端代码中执行。

现在,这并不普遍。如果您不做与数据库相关的事情,那么在客户端做这件事是有意义的。如果它是高度 CPU 密集型的,并且在客户端中执行它是有意义的,那就太好了。原因是,您为获得 Oracle 的许可付出了大笔资金,而且您(可能)为每个 CPU 付费。因此,如果您在 Oracle 许可的 CPU 上进行大量与数据库无关的工作,那将是非常昂贵的。

总而言之,如果它是实际的数据库相关代码(插入/更新/删除/选择),即使它周围有一些非平凡的逻辑,把它放在数据库中也是有意义的。如果它实际上没有与数据库交互,它可能不属于数据库。

最后,您对 PL/SQL 代码效率的评论是正确的。PL/SQL 在解析和存储执行计划方面具有很高的效率。此外,PL/SQL 会自动预取数据。

更多关于 PL/SQL 优势的信息可以在这里找到:http: //docs.oracle.com/database/121/LNPLS/overview.htm#LNPLS00101

于 2014-09-04T14:22:41.487 回答