Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 返回游标是否更快?_Sql_Oracle - Fatal编程技术网

Sql 返回游标是否更快?

Sql 返回游标是否更快?,sql,oracle,Sql,Oracle,使用存储过程时,返回光标是否更快?或者使用数据类型的out数据参数更快。 或者它真的不会有任何性能差异 PROCEDURE SPUSINGCURSOR ( input1 INT, retcursor out sys_refcursor ) IS BEGIN OPEN retcursor FOR SELECT var1, var2, var3 FROM Table_Vlaues

使用存储过程时,返回光标是否更快?或者使用数据类型的out数据参数更快。 或者它真的不会有任何性能差异

PROCEDURE SPUSINGCURSOR ( input1 INT,
                          retcursor out sys_refcursor ) IS
BEGIN

  OPEN retcursor FOR
    SELECT var1,
           var2,
           var3
      FROM Table_Vlaues
     WHERE var1 = input1
  ORDER BY var1;

END;

这取决于很多事情

如果在SP内执行查询并返回包含结果的嵌套表类型,则SP将花费时间运行并消耗保存数据所需的内存。它还需要一次性将所有数据发送回客户端,这需要一些时间。但是,如果在继续执行其他操作之前需要访问所有数据,并且内存需求不是太大,那么这是一种合理的方法

如果改为打开并返回REF游标,则实际SP执行时间和所需内存将减少;但您只是将执行时间推迟到稍后从游标获取时。如果有一个很好的机会,您将不需要获取所有的行;或者如果数据集可能非常大;或者,如果以小批量方式获取行允许您在其间执行一些其他有意义的工作(例如将它们传输到另一个线程或进程,而该线程或进程实际上将对它们执行某些操作),那么这可能是一种更好的方法。返回游标的主要缺点是,从游标获取数据可能需要更多的网络往返,这可能比一次返回所有数据要慢

返回open REF游标的一个非性能优势是,在某些客户机环境中更容易使用它(例如,在JDBC中,它直接映射到结果集,而对于嵌套表类型,您需要做额外的工作来向Java提供类型信息)