Plsql SQL Developer中流水线函数的性能较差

Plsql SQL Developer中流水线函数的性能较差,plsql,oracle11g,oracle-sqldeveloper,pipelined-function,Plsql,Oracle11g,Oracle Sqldeveloper,Pipelined Function,我有一个流水线表函数,如 FUNCTION FOO ( <PARAMETERS_LIST> ) RETURN T_TAB PIPELINED AS BEGIN FOR rec IN (<A LITTLE BIT COMPLEX QUERY WITH PARAMETERS_LIST>) LOOP PIPE row(T_WF(<COLUMN_LIST>)); END LOOP; RETURN; END FOO; 函数FOO ( )返回

我有一个流水线表函数,如

FUNCTION FOO
(
    <PARAMETERS_LIST>
) RETURN T_TAB PIPELINED
AS
BEGIN
FOR rec IN
(<A LITTLE BIT COMPLEX QUERY WITH PARAMETERS_LIST>)
  LOOP
    PIPE row(T_WF(<COLUMN_LIST>));
  END LOOP;
  RETURN;
END FOO;
函数FOO
(
)返回T_标签管道化
作为
开始
登记
()
环
管排(T_WF());
端环;
返回;
完富;;

我通过
select*fromtable(FOO())在sqldeveloper中测试查询,其中ROWNUM在不了解数据库或实际函数的情况下很难说,可能是一系列问题,例如缺少索引

您可以做的是查看oracle用于执行查询的计划:

explain plan for select * from TABLE(FOO(<PARAMETERS_LIST>)) WHERE ROWNUM <= 200

SELECT * 
FROM   TABLE(DBMS_XPLAN.DISPLAY);

explain plan for select*from TABLE(FOO()),其中ROWNUM应该只有两个上下文开关-for r IN(qry)自动优化为一次获取100行。感谢您的建议。我们将很快进行调查并给您反馈。这是由于缺少索引造成的。上下文切换在这里不是问题,因为只需要200条记录。查询可以找到多少行?对于普通查询,返回所有行、结果的第一页或200行需要0.9秒吗?直接运行时是否有rownum限制?如果是这样的话,可能会针对停止键计数进行优化,但在游标版本中不会发生这种情况,因为函数不知道您在该点限制了结果。显示直接运行的执行计划可能会透露一些信息;如果您将其限制为200行,那么也显示没有该限制的执行计划。SQL developer显示普通查询的前50行。我们还添加了rownum