2010-08-04 33 views
0

我有PL/SQL函数返回包含28列和8100行的光标。当我从SQL Plus执行该功能时,我马上就得到了结果,并且在SQL Developer中,我正在运行花费时间(大约80秒)的脚本。 Java代码也是如此。当列数减少到2时,我在不到4秒的时间内得到响应。有人可以解释在这种情况下发生了什么?为什么SQL Developer和SQL Plus中的Oracle PL/SQL响应时间有所不同?

+0

那么SQL Developer是用Java编写的,反之,SQL * Plus是本地代码。所以有一个线索。你的桌子是什么样的? – APC 2010-08-04 19:03:31

+0

这是一个远程数据库吗?如果SQL * Plus是相同的服务器数据库上运行,并且SQL开发人员访问它在网络上,那么这可能是一个因素,特别是如果你有LOB数据,或返回列的大小是未知的(所以它必须分配比实际需要更多的内存和带宽)。据推测,你可以通过在本地运行Java版本来检查。同样从Java你可以指定列的大小,看看是否有帮助。 – 2010-08-04 19:59:21

+0

相当明显没有,SQL Developer有除了流线型的工具,是由与数据库巧妙对接,叫更多的层:SQLPLUS。一些会降低性能的东西,只是在屏幕上显示数据。如果让大量数据在您的窗口滚动,它可能会严重减慢。在这种情况下,只需将另一个不相关的窗口(Windows资源管理器,浏览器......)全屏显示,直到查询完成。 – tvCa 2014-12-30 17:02:49

回答

1

做出的改变在SQL Developer中,默认为50。如果你从它撞击到500看到的结果“SQL数组提取大小”最简单的实验,有答案。

有趣的是,等效SQL Plus参数的默认值仅为15,但正如APC所述,SQL Plus具有本地优势。

如果要更改“SQL数组提取大小”没有做任何事情,来看看接下来的事情就是JDBC设置,这些设置SQL Developer使用和SQL * Plus不会。

0

除了我之前好答案...

SQL * PLUS只要第一行返回,而SQL Developer有找到结果集的大小来发送数据直接回到屏幕在显示记录之前返回。

这也许可以解释为什么有用于SQL开发的延迟,特别是如果结果集较大或需要较长时间才能完全恢复(例如,如果执行路径是复杂的)。