为什么SQL Developer与SQL Plus在Oracle PL/SQL响应时间上存在差异?

为什么SQL Developer与SQL Plus在Oracle PL/SQL响应时间上存在差异?,oracle,plsql,oracle10g,sqlplus,oracle-sqldeveloper,Oracle,Plsql,Oracle10g,Sqlplus,Oracle Sqldeveloper,我有一个PL/SQL函数,它返回包含28列和8100行的游标。当我从sqlplus执行该函数时,我立即得到了结果,在sqldeveloper中,我运行的脚本耗时很长(大约80秒)。Java代码也是如此。当列数减少到2时,我在不到4秒内得到了响应。有人能解释一下这种情况下发生了什么吗?最简单的实验是更改SQL Developer中的“SQL数组获取大小”,默认值为50。如果你看到把它提高到500的结果,答案就在这里 有趣的是,等效SQLPlus参数的默认值只有15,但正如APC所说,SQLPlus

我有一个PL/SQL函数,它返回包含28列和8100行的游标。当我从sqlplus执行该函数时,我立即得到了结果,在sqldeveloper中,我运行的脚本耗时很长(大约80秒)。Java代码也是如此。当列数减少到2时,我在不到4秒内得到了响应。有人能解释一下这种情况下发生了什么吗?

最简单的实验是更改SQL Developer中的“SQL数组获取大小”,默认值为50。如果你看到把它提高到500的结果,答案就在这里

有趣的是,等效SQLPlus参数的默认值只有15,但正如APC所说,SQLPlus具有本机的优势


如果更改“SQL数组获取大小”没有任何作用,那么下一步要看的是JDBC设置,SQL Developer使用JDBC设置,而SQL*Plus不使用JDBC设置。

除了我之前的好答案之外

SQL*PLus在返回第一行后立即将数据直接发送回屏幕,而SQL Developer必须在显示记录之前找到要返回的结果集的大小


这可能解释了为什么SQL Developer会出现延迟,特别是当结果集很大或需要很长时间才能完全返回时(例如,如果执行路径复杂)。

SQL Developer也是用Java编写的,而SQL*Plus是本机代码。所以有一个线索。您的表是什么样子的?这是远程数据库吗?如果SQL*Plus与数据库在同一台服务器上运行,并且SQL Developer通过网络访问它,那么这可能是一个因素,特别是如果您有LOB数据,或者返回列的大小未知(因此它必须分配比实际需要更多的内存和带宽)。大概您可以通过在本地运行Java版本来检查这一点。另外,您还可以通过Java指定列的大小,看看这是否有帮助。很明显,不是的,SQL Developer除了简化了与数据库的接口工具SQLPLUS之外,还有更多的层。可能会降低性能的东西,就是在屏幕上显示数据。如果你让大量的数据在你的窗口上滚动,它会严重减速。在这种情况下,只需将另一个不相关的窗口(windows资源管理器、浏览器等)全屏显示,直到查询完成。