recursive calls统计在一段语句执行时,递归调用的次数。
在执行SQL时,生成的执行计划可能牵涉到许多相关的调用执行,比如在执行Update时可能需要先select,这个select就是update的递归调用;在执行语句时可能还牵涉到对系统表的递归查询等操作,这些通通都算是递归调用。
看个例子:
先创建一个函数:
create or replace function testf return integer as
--l_user varchar2(50) default user;
l_cnt integer;
begin
select count(*) into l_cnt from sys.all_objects;
return l_cnt;
end;
SQL> alter system flush shared_pool;
系统已更改。
SQL> select id,testf from rgs;
已选择19行。
执行计划
-----------------------------------------------------
etc..
统计信息
-----------------------------------------------------
116999 recursive calls
SQL> select id,testf from rgs;
已选择19行。
执行计划
-----------------------------------------------------
etc..
统计信息
-----------------------------------------------------
101783 recursive calls
SQL> select 101783/19 from dual;
101783/19
----------
5357说明没查找一行要付出5357 recursive calls的代价。
SQL> select 116999-101783 from dual;
116999-101783
-------------
15216说明除掉testf函数部分的recursive calls,对其他部分的resursive calls(包括对系统表访问的recursive calls)的次数。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/17075086/viewspace-613911/
,如需转载,请注明出处,否则将追究法律责任。