返回游标更快吗?

| 使用存储过程时,返回游标的速度更快吗?还是使用数据类型的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 CURSOR,则实际的SP执行时间和所需的内存将更少;但是您只是将执行时间推迟到以后从游标中获取时。如果有很大的机会,您将不需要获取所有行;或者该数据集可能非常大;或者或者,如果以小批量方式获取行允许您在它们之间做一些其他有意义的工作(例如,将它们通过管道传递到实际上将对它们进行某些操作的另一个线程或进程),那么这可能是一种更好的选择。返回游标的主要缺点是,从游标中进行获取可能需要更多的网络往返,这可能比仅一次返回所有数据要慢得多。 返回打开的REF CURSOR的非性能优势是,在某些客户端环境中使用起来更容易(例如,在JDBC中,它直接映射到ResultSet,而对于嵌套表类型,您需要做一些额外的工作才能为Java提供类型信息)。     

要回复问题请先登录注册