Oracle 存储函数与查询中的联接

Posted

技术标签:

【中文标题】Oracle 存储函数与查询中的联接【英文标题】:Oracle Stored function Vs Join in queries 【发布时间】:2020-04-30 13:36:32 【问题描述】:

我想从两个表中检索数据。 这两个表与外键引用相关。 我有以下两种方法来做到这一点。但不知道哪个更好。

    来自查询的存储函数调用 使用连接子句

哪种方法更好? 我正在使用以下技术:Oracle12c、Java、IBatis。 那么实现这一目标的最佳方法是什么?

【问题讨论】:

函数会做什么?在幕后进行相同的加入?一般来说,除非有特定原因,否则您应该避免将函数嵌入到查询中,因为它们会根据您放置它们的位置以及涉及的数据行数而迅速降低您的性能。也就是说,还有一些特定的用例是有意义的。如果没有更多关于您打算做什么的信息,很难知道您的情况。 【参考方案1】:

由于 join 将所有内容都保留在 SQL 级别,它应该是一个更好的选择。

使用函数 - 即 PL/SQL - 会导致上下文切换(从 SQL 到 PL/SQL 再从 SQL 到 PL/SQL ...) 会占用资源。

如果数据集很小,您不会注意到任何事情,但是 - 随着所涉及的行数越来越多,执行时间可能会在第二种选择中受到影响。

如果您要对其进行测试,请多次运行每个选项,因为可能存在缓存。

【讨论】:

以上是关于Oracle 存储函数与查询中的联接的主要内容,如果未能解决你的问题,请参考以下文章

oracle中的存储过程如何返回查询到的多个值?

oracle的存储过程和函数有什么区别?

java调用Oracle中的存储过程与存储函数

mysql 与oracle中的存储过程及函数有啥区别,尽可能详细哦

oracle 如何返回多条记录

ORACLE PL/SQL:使用多个参数调用存储过程函数(DML 查询)