2016년 9월 28일 수요일

[오라클학원,SQL학원,PLSQL학원추천◆탑크리에듀]#5. 함수 결과 캐싱(Function Result Caching)

#5. 함수 결과 캐싱(Function Result Caching) 

 오라클11g의 함수결과 캐싱(Function Result Caching)은 함수의 결과를 캐싱하는 기능으로 캐싱기능을 이용하여 함수를 호출하면 오라클은 같은 파라미터 입력 값으로 이미 실행되었는지 검사하고, 실행된적이 있다면 함수 BODY를 실행하지 않고 캐시 영역에서 결과치를 리턴한다. 만약 처음 실행한다면 함수를 실행하고 결과를 캐시에 저장한다. 

 만약 원본 데이터에 변경이 생기면 오라클 서버는 캐시를 없애고 함수의 요청이 있다면 다시 실행하고 캐시에 저장한다. 

SQL> select count(*) from myemp1; 

  COUNT(*) 
---------- 
  10000000 

SQL> CREATE OR REPLACE  FUNCTION get_sal 
 (p_deptno  IN  NUMBER) 
RETURN  NUMBER 
IS 
v_sal  NUMBER; 
BEGIN   
SELECT  sum(sal) 
INTO      v_sal 
FROM    myemp1 
WHERE deptno  =  p_deptno; 
RETURN v_sal; 
END get_sal ; 


함수가 생성되었습니다. 

SQL> set timing on 
SQL> select get_sal(0) from dual; 

GET_SAL(0) 
---------- 
1.0000E+12 

경  과: 00:00:10.68 

SQL> select get_sal(0) from dual; 

GET_SAL(0) 
---------- 
1.0000E+12 

경  과: 00:00:07.81 

이번에는 함수 결과를 캐싱 해보자. 

SQL> CREATE OR REPLACE  FUNCTION get_sal2 
 (p_deptno  IN  NUMBER) 
RETURN  NUMBER 
RESULT_CACHE RELIES_ON (myemp1) 
IS 
v_sal  NUMBER; 
BEGIN   
SELECT  sum(sal) 
INTO      v_sal 
FROM    myemp1 
WHERE deptno  =  p_deptno; 
RETURN v_sal; 
END get_sal2 ; 


SQL> select get_sal2(0) from dual; 

GET_SAL2(0) 
----------- 
 1.0000E+12 

경  과: 00:00:08.32 

-- 아래는 캐시에서 결과를 가져온다. 
SQL> select get_sal2(0) from dual; 

GET_SAL2(0) 
----------- 
 1.0000E+12 

경  과: 00:00:00.01 

-- 이번에는 원본데이터에 변화를 줘보자. 
SQL> insert into myemp1 (empno, ename, sal, deptno) values (11111111,'11111111길동',1000000, 0); 

SQL> commit; 

-- 원본데이터가 변경되었으므로 함수를 다시 실행하고 결과를 캐시에 보관한다. 
SQL> select get_sal2(0) from dual; 

GET_SAL2(0) 
----------- 
 5.8000E+12 

경  과: 00:00:14.09 

-- 다시 실행하니 캐시에서 가져와 빠르다. 
SQL> select get_sal2(0) from dual; 

GET_SAL2(0) 
----------- 
 5.8000E+12 

경  과: 00:00:00.17

댓글 없음:

댓글 쓰기