Oracle之利用函数索引减少递归调用
来源:互联网 发布:oc中往数组添加元素 编辑:程序博客网 时间:2024/06/06 09:34
drop table t1 purge;
drop table t2 purge;
create table t1 (first_name varchar2(200),last_name varchar2(200),id number);
create table t2 as select * from dba_objects where rownum<=1000;
insert into t1 (first_name,last_name,id) select object_name,object_type,rownum from dba_objects where rownum<=1000;
v_name t2.object_name%type;
begin
select object_name
into v_name
from t2
where object_id=p_id;
return v_name;
end;
/
set linesize 1000
set autotrace traceonly
select *
from t1 where get_obj_name(id)='TEST' ;
执行计划
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 10 | 2170 | 3 (0)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| T1 | 10 | 2170 | 3 (0)| 00:00:01 |
--------------------------------------------------------------------------
统计信息
----------------------------------------------------------
1057 recursive calls
0 db block gets
16007 consistent gets
0 physical reads
0 redo size
410 bytes sent via SQL*Net to client
404 bytes received via SQL*Net from client
1 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
0 rows processed
create index idx_func_id on t1(get_obj_name(id));
执行计划
----------------------------------------------------------
Plan hash value: 4083325411
-------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 10 | 22190 | 2 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| T1 | 10 | 22190 | 2 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | IDX_FUNC_ID | 4 | | 1 (0)| 00:00:01 |
-------------------------------------------------------------------------------------------
统计信息
----------------------------------------------------------
0 recursive calls
0 db block gets
2 consistent gets
0 physical reads
0 redo size
410 bytes sent via SQL*Net to client
404 bytes received via SQL*Net from client
1 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
drop table t2 purge;
create table t1 (first_name varchar2(200),last_name varchar2(200),id number);
create table t2 as select * from dba_objects where rownum<=1000;
insert into t1 (first_name,last_name,id) select object_name,object_type,rownum from dba_objects where rownum<=1000;
commit;
v_name t2.object_name%type;
begin
select object_name
into v_name
from t2
where object_id=p_id;
return v_name;
end;
/
set linesize 1000
set autotrace traceonly
select *
from t1 where get_obj_name(id)='TEST' ;
执行计划
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 10 | 2170 | 3 (0)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| T1 | 10 | 2170 | 3 (0)| 00:00:01 |
--------------------------------------------------------------------------
统计信息
----------------------------------------------------------
1057 recursive calls
0 db block gets
16007 consistent gets
0 physical reads
0 redo size
410 bytes sent via SQL*Net to client
404 bytes received via SQL*Net from client
1 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
0 rows processed
create index idx_func_id on t1(get_obj_name(id));
执行计划
----------------------------------------------------------
Plan hash value: 4083325411
-------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 10 | 22190 | 2 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| T1 | 10 | 22190 | 2 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | IDX_FUNC_ID | 4 | | 1 (0)| 00:00:01 |
-------------------------------------------------------------------------------------------
统计信息
----------------------------------------------------------
0 recursive calls
0 db block gets
2 consistent gets
0 physical reads
0 redo size
410 bytes sent via SQL*Net to client
404 bytes received via SQL*Net from client
1 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
0 rows processed
解析:建函数索引以后,通过执行计划发现,1057 recursive calls递归调用没有了,
由于函数索引特性会预计算所以递归调用没有了。
阅读全文
0 0
- Oracle之利用函数索引减少递归调用
- 利用函数递归调用实现汉诺塔
- oracle 使用rownum减少自定义函数的调用
- C++函数之递归调用
- Oracle之函数索引修改,重建索引
- C#函数式编程之递归调用
- 数据结构之---栈和递归&函数调用
- oracle索引-函数索引
- 递归函数调用递归函数
- Oracle index】SQL语句利用函数索引注意点
- 利用序列减少Oracle数据库开发工作量
- 利用函数索引优化<>
- Oracle之函数索引之各种列的函数转换
- C语言之函数调用12—递归法求阿克曼函数
- oracle 学习之--------利用递归算法实现阶乘
- 利用尾递归减少栈空间的消耗
- 利用尾递归减少栈空间的消耗
- 第二学期第二周实验之递归函数的利用
- http你不得不知道的那些事(八)--TCP三次握手
- Microsoft Visual Studio 调试监控器(MSVSMON.EXE)未能启动
- Android Monkey 压力测试二
- windows下安装redis
- log4j示例
- Oracle之利用函数索引减少递归调用
- CMD常用命令
- c#数组练习:静态(规则与不规则)与动态数组的定义与输出
- 结构体排序,sort排序,c++sort
- 小甲鱼python视频的笔记【斜杠派】
- Ubuntu14.04更换源方法以及常见问题
- JSP页面传参中文乱码
- 图像分析:二值图像连通域标记-基于行程的标记方法
- 24. Swap Nodes in Pairs