본문 바로가기

Database/PLSQL

072 - [Oracle PL/SQL] RESULT_CACHE hint

 

 

 

  • result_cache 옵션을 추가하면 동일한 쿼리를 실행할때 캐쉬에서 결과를 가져오므로 처리속도가 아주 빠르다.
--1 Cache and parallel are only in oracle enterprise editions 
--also the DBA make changes in these values
# result_cache 옵션 사용은 아래 3개의 파라미터와 밀접한 관계가 있으므로
# dba가 설정을 적절히 정해야만 원하는 결과를 얻을수 있다
--parameter shared_pool_size
--parameter result_cache_max_size
--parameter result_cache_mode

create or replace function get_sum_sal_dept
    ( dept_id number )  
    return number result_cache
is
    v_sal number;
begin
    select sum(salary)
    into v_sal
    from
    employees
    where department_id =dept_id;
    return v_sal;
  
end;

select get_sum_sal_dept(10) from dual;
select get_sum_sal_dept(20) from dual;
select get_sum_sal_dept(30) from dual;

# 캐쉬에서 결과를 다시 가져오므로 처리 속도가 아주 빨름.
--now when you do :
select get_sum_sal_dept(10) from dual;
--it should be faster because the resulte is stored in cashe,

# 여기서 의문이 생깁니다. 만약에 테이블에 변경이 발생했는데, 그걸 그대로 캐쉬에서 가져오면 어떻게 하나요?
# 그래서 생긴 옵션이 relies_on (테이블명) 입니다.
# 오라클에서는 이걸 11g 부터는 자동으로 감시하게 되어 있습니다.
# 11g 부터는 아래 코드 처럼 추가를 해도, 안해도 결과는 문제가 없습니다.
# 테이블의 변동사항이 있다면 자동으로 다시 계산/쿼리를 실행합니다.

--relies_on (employees) is optional 
--This option has become obsolete since version 11G release 2. 
--The database figures out where the function relies on. 
--You can still include the relies_on clause, 
--but it will be for documentation purposes only.
create or replace function get_sum_sal_dept
    ( dept_id number )  
    return number result_cache relies_on (employees)
is
    v_sal number;
begin
    select sum(salary)
    into v_sal
    from
    employees
    where department_id =dept_id;
    return v_sal;
  
end;
------------

 

 

 

이런 옵션이 있다는 정도만 알고 넘어감.