PL / SQL - 提升性能的NOCOPY参数

问题描述 投票:3回答:2

我想知道如何将NOCOPY作为函数参数传递可以提高返回SYS_REFCURSOR的函数的性能。

阅读Oracle文档后,我阅读了以下内容:

如果要在OUT参数中传回大量数据(例如集合,大VARCHAR2值或LOB),此技术可以显着提高速度。

由于SYS_REFCURSORS是指向查询结果集的指针而SELECT是SQL中最快的操作,因此在函数中传递<SYS_REFCURSOR> OUT NOCOPY SYS_REFCURSOR这样的东西有什么好处吗?

我找到了this thread,但出现了两个意见:

1 - 我们可以通过引用增加性能调用,而不是通过以下值增加:

Procedure (vRefCur OUT NOCOPY SYS_REFCURSOR). 

2 - SYS_REFCURSOR已经是一个指针(link)并且为了提高性能,应优化SQL语句。

你怎么看?

提前致谢!

database oracle performance plsql
2个回答
4
投票

至于表现 - 没有太大的区别。

如果未指定NOCOPY,Oracle将只创建指针的另一个副本。 因此,如果您不希望在系统中有两个相同的指针 - 提供NOCOPY提示。


4
投票

对于SYS_REFCURSOR来说没有任何区别。 SYS_REFCURSOR只是一个指针,即大小只有几个字节。

你会得到LOB的不同,它可能有几千兆甚至几千字节的大小。

© www.soinside.com 2019 - 2024. All rights reserved.